Android 开发之 RecyclerView Adapter 模板

来源:互联网 发布:java -classpath 命令 编辑:程序博客网 时间:2024/06/08 02:10

之前 ListView 控件的功能已足够强大;如今出来许久的 RecyclerView 基本上已经覆盖了它的很多功能,先写我们看看效果图:
这里写图片描述 这里写图片描述

这里写图片描述 这里写图片描述

1,先在 app 文件夹下的build.gradle 文件添加:

compile 'com.android.support:recyclerview-v7:25.2.0'

2,主布局文件:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.gyq.recyclerviewdemo.MainActivity">    <android.support.v7.widget.RecyclerView        android:id="@+id/recycler_view"        android:layout_width="match_parent"        android:layout_height="match_parent"/></RelativeLayout>

3,item 布局文件(根据不同分格,做出相应的变化):

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_margin="5dp">    <ImageView        android:id="@+id/fruit_image"        android:layout_width="80dp"        android:layout_height="80dp"        android:layout_gravity="center_vertical"/>    <TextView        android:id="@+id/fruit_name"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center_vertical"        android:layout_marginLeft="10dp"/></LinearLayout>

4,FruitAdapter.java

package com.gyq.recyclerviewdemo.adapter;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import com.gyq.recyclerviewdemo.R;import com.gyq.recyclerviewdemo.entity.Fruit;import java.util.List;/** * Created by gyq on 2017/6/14 09:16 */public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> {    private List<Fruit> mFruitInfos;    static class ViewHolder extends RecyclerView.ViewHolder {        ImageView fruitImage;        TextView fruitName;        public ViewHolder(View itemView) {            super(itemView);            fruitImage = (ImageView)itemView.findViewById(R.id.fruit_image);            fruitName = (TextView)itemView.findViewById(R.id.fruit_name);        }    }    public FruitAdapter(List<Fruit> fruitInfos) {        this.mFruitInfos = fruitInfos;    }    @Override    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_fruitlist, parent, false);        ViewHolder holder = new ViewHolder(view);        return holder;    }    @Override    public void onBindViewHolder(ViewHolder holder, int position) {        Fruit fruit = mFruitInfos.get(position);        holder.fruitImage.setImageResource(fruit.getImageId());        holder.fruitName.setText(fruit.getName());    }    @Override    public int getItemCount() {        return mFruitInfos.size();    }}

5,Fruit.java 实体类

package com.gyq.recyclerviewdemo.entity;/** * Created by gyq on 2017/6/13 14:44 */public class Fruit {    private String name;    private int imageId;    public Fruit(String name, int imageId) {        this.imageId = imageId;        this.name = name;    }    public int getImageId() {        return imageId;    }    public String getName() {        return name;    }}

6,MainActivity.java

public class MainActivity extends AppCompatActivity {    private List<Fruit> mInfos = new ArrayList<>();    private RecyclerView mRecyclerView;    private CommonAdapter<Fruit> mAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initDatas();        mRecyclerView = (RecyclerView)findViewById(R.id.recycler_view);        LinearLayoutManager manager = new LinearLayoutManager(this);        //横向滚动        //manager.setOrientation(LinearLayoutManager.HORIZONTAL);        //网格布局        //GridLayoutManager manager = new GridLayoutManager(this,3);        //瀑布流        //StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);        mRecyclerView.setLayoutManager(manager);        FruitAdapter adapter = new FruitAdapter(mInfos);        mRecyclerView.setAdapter(adapter);    }    private void initDatas() {        for (int i = 0;i < 2;i++) {            Fruit apple = new Fruit("Apple",R.drawable.apple);            mInfos.add(apple);            Fruit apricot = new Fruit("Apricot",R.drawable.apricot);            mInfos.add(apricot);            Fruit banana = new Fruit("Banana",R.drawable.banana);            mInfos.add(banana);            Fruit cherry = new Fruit("Cherry",R.drawable.cherry);            mInfos.add(cherry);            Fruit kiwi = new Fruit("Kiwi",R.drawable.kiwi);            mInfos.add(kiwi);            Fruit lemon = new Fruit("Lemon",R.drawable.lemon);            mInfos.add(lemon);            Fruit mango = new Fruit("Mango",R.drawable.mango);            mInfos.add(mango);            Fruit orange = new Fruit("Orange",R.drawable.orange);            mInfos.add(orange);            Fruit peach = new Fruit("Peach",R.drawable.peach);            mInfos.add(peach);            Fruit pear = new Fruit("Pear",R.drawable.pear);            mInfos.add(pear);            Fruit strawberry = new Fruit("Strawberry",R.drawable.strawberry);            mInfos.add(strawberry);            Fruit tomato = new Fruit("Tomato",R.drawable.tomato);            mInfos.add(tomato);        }    }    private String getRandomLengthName(String name) {        Random random = new Random();        int length = random.nextInt(20) + 1;        StringBuilder builder = new StringBuilder();        for (int i = 0;i < length;i++) {            builder.append(name);        }        return builder.toString();    }}

使用万能适配器

1,先在 app 文件夹下的build.gradle 文件添加:

compile 'com.zhy:base-rvadapter:3.0.3'

2,直接使用:

package com.gyq.recyclerviewdemo;import android.os.Bundle;import android.os.Handler;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.DividerItemDecoration;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.View;import android.widget.TextView;import android.widget.Toast;import com.gyq.recyclerviewdemo.entity.Fruit;import com.zhy.adapter.recyclerview.CommonAdapter;import com.zhy.adapter.recyclerview.base.ViewHolder;import com.zhy.adapter.recyclerview.wrapper.HeaderAndFooterWrapper;import com.zhy.adapter.recyclerview.wrapper.LoadMoreWrapper;import java.util.ArrayList;import java.util.List;import java.util.Random;public class MainActivity extends AppCompatActivity {    private List<Fruit> mInfos = new ArrayList<>();    private RecyclerView mRecyclerView;    private CommonAdapter<Fruit> mAdapter;    private HeaderAndFooterWrapper mHeaderAndFooterWrapper;    private LoadMoreWrapper mLoadMoreWrapper;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initDatas();        mRecyclerView = (RecyclerView)findViewById(R.id.recycler_view);        LinearLayoutManager manager = new LinearLayoutManager(this);        //横向滚动        //manager.setOrientation(LinearLayoutManager.HORIZONTAL);        //网格布局        //GridLayoutManager manager = new GridLayoutManager(this,3);        //瀑布流        //StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);        mRecyclerView.setLayoutManager(manager);        //添加分隔线        mRecyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));        /*FruitAdapter adapter = new FruitAdapter(mInfos);        mRecyclerView.setAdapter(adapter);*/        mAdapter = new CommonAdapter<Fruit>(this,R.layout.item_fruitlist,mInfos) {            @Override            protected void convert(ViewHolder holder, Fruit fruit, int position) {                holder.setText(R.id.fruit_name,fruit.getName());                holder.setImageResource(R.id.fruit_image,fruit.getImageId());            }        };        initHeaderAndFooter();        mLoadMoreWrapper = new LoadMoreWrapper(mHeaderAndFooterWrapper);        mLoadMoreWrapper.setLoadMoreView(R.layout.default_loading);        mLoadMoreWrapper.setOnLoadMoreListener(new LoadMoreWrapper.OnLoadMoreListener()        {            @Override            public void onLoadMoreRequested()            {                new Handler().postDelayed(new Runnable()                {                    @Override                    public void run()                    {                        for (int i = 0;i < 10;i++) {                            Fruit apple = new Fruit("Apple",R.drawable.apple);                            mInfos.add(apple);                        }                        mLoadMoreWrapper.notifyDataSetChanged();                    }                }, 3000);            }        });        mRecyclerView.setAdapter(mLoadMoreWrapper);        mAdapter.setOnItemClickListener(new CommonAdapter.OnItemClickListener()        {            @Override            public void onItemClick(View view, RecyclerView.ViewHolder holder, int position)            {                Toast.makeText(MainActivity.this, "pos = " + position, Toast.LENGTH_SHORT).show();                mAdapter.notifyItemRemoved(position);            }            @Override            public boolean onItemLongClick(View view, RecyclerView.ViewHolder holder, int position)            {                return false;            }        });    }    private void initHeaderAndFooter() {        mHeaderAndFooterWrapper = new HeaderAndFooterWrapper(mAdapter);        TextView t1 = new TextView(this);        t1.setText("Header 1");        TextView t2 = new TextView(this);        t2.setText("Header 2");        mHeaderAndFooterWrapper.addHeaderView(t1);        mHeaderAndFooterWrapper.addHeaderView(t2);    }    private void initDatas() {        for (int i = 0;i < 2;i++) {            Fruit apple = new Fruit("Apple",R.drawable.apple);            mInfos.add(apple);            Fruit apricot = new Fruit("Apricot",R.drawable.apricot);            mInfos.add(apricot);            Fruit banana = new Fruit("Banana",R.drawable.banana);            mInfos.add(banana);            Fruit cherry = new Fruit("Cherry",R.drawable.cherry);            mInfos.add(cherry);            Fruit kiwi = new Fruit("Kiwi",R.drawable.kiwi);            mInfos.add(kiwi);            Fruit lemon = new Fruit("Lemon",R.drawable.lemon);            mInfos.add(lemon);            Fruit mango = new Fruit("Mango",R.drawable.mango);            mInfos.add(mango);            Fruit orange = new Fruit("Orange",R.drawable.orange);            mInfos.add(orange);            Fruit peach = new Fruit("Peach",R.drawable.peach);            mInfos.add(peach);            Fruit pear = new Fruit("Pear",R.drawable.pear);            mInfos.add(pear);            Fruit strawberry = new Fruit("Strawberry",R.drawable.strawberry);            mInfos.add(strawberry);            Fruit tomato = new Fruit("Tomato",R.drawable.tomato);            mInfos.add(tomato);        }    }    private String getRandomLengthName(String name) {        Random random = new Random();        int length = random.nextInt(20) + 1;        StringBuilder builder = new StringBuilder();        for (int i = 0;i < length;i++) {            builder.append(name);        }        return builder.toString();    }}
原创粉丝点击