android RecyclerView使用(二)多类别item

在很多地方我们需要用到列表,而列表又有多种类别的内容显示,

现在列表一般采用recyclerview,那么如何在recyclerview中添加多类别的内容呢?

首先当然是要添加依赖

compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'

在main_activity.xml中添加控件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </android.support.v7.widget.RecyclerView>

</LinearLayout>

新建两个布局,作为item的布局

item_first.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content">
    
    <TextView
        android:padding="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:text="布局一"
        android:textSize="15sp"/>
</LinearLayout>

item_two.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <ImageView
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:background="@drawable/ic_launcher_background"/>
    <TextView
        android:padding="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="布局二"
        android:textSize="15sp"/>

</LinearLayout>

给recyclerview控件设置布局管理器

 mRecycler.setLayoutManager(new LinearLayoutManager(this));

新建一个Adapter;关键就在Adapter里

注意:有几种类型要写几个viewholder

public class MyAdapter extends RecyclerView.Adapter{
    private List<Integer> data;
    private Context mContext;
    private LayoutInflater mInflater;
    private int type;

    public MyAdapter(Context context, List<Integer> mData){
        this.mContext = context;
        this.data = mData;
        this.mInflater = LayoutInflater.from(context);
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (viewType == 1) {
            View view = mInflater.inflate (R.layout.item_first,parent, false);
            FirstViewHolder viewHolder = new  FirstViewHolder (view);
            return viewHolder;

        }else if(viewType==2){
            View view = mInflater.inflate (R.layout.item_two,parent, false);
            TwoViewHolder viewHolder = new TwoViewHolder (view);
            return viewHolder;
        }
        return null;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        if (getItemViewType(position) == 1) {
            FirstViewHolder firstViewHolder= (FirstViewHolder) holder;

        }else if(getItemViewType(position)==2) {
            TwoViewHolder twoViewHolder= (TwoViewHolder) holder;

        }

    }

    @Override
    public int getItemCount() {
        return data.size();
    }

    @Override
    public int getItemViewType(int position) {
       if(data.get(position)%2==0){
           type=1;

       }else {
           type=2;
       }
       return type;
    }

    class FirstViewHolder extends RecyclerView.ViewHolder{
        private TextView textView;

        public FirstViewHolder( View itemView) {
            super(itemView);
        }
    }


    class TwoViewHolder extends RecyclerView.ViewHolder{
        private TextView textView;
        public TwoViewHolder( View itemView) {
            super(itemView);
        }

    }

}

给recyclerview添加adapter:

public class MainActivity extends Activity {
    private RecyclerView mRecycler;
    private List<Integer>  list;
    private MyAdapter myAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mRecycler = findViewById(R.id.rv);
        mRecycler.setLayoutManager(new LinearLayoutManager(this));
        initdata();
        myAdapter = new MyAdapter(this,list);
        mRecycler.setAdapter(myAdapter);

    }
    private void initdata(){
        list = new ArrayList<>();
        for(int i = 0;i<8;i++){
            list.add(i);
        }
    }
}

最后如图:

主要就是在getItemViewType()方法里进行类别筛选和在onCreateViewHolder()onBindViewHolder()方法里根据类别分别加入不同的ViewHolder.

猜你喜欢

转载自blog.csdn.net/hua93/article/details/81292699
今日推荐