recyclerView的加載不同的item

第九天·RecyclerView的不同item

 要想加載不同的佈局,在Adapter裏就需要有兩種ViewHolder,分別維護不同佈局item

思路;
1、聲明recyclerView和List< MyData >list;

然後要創建MyData的類–>創建一個構建方法

在Adapter的類中用onCreateViewHolder裏
用swtch(),case0和case1進行拿到item的佈局

class MyAdapter extends RecyclerView.Adapter{

        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            switch (viewType){
                case 0:
                    View view=LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item_0,null);
                    MyViewHolder0 viewHolder0=new MyViewHolder0(view);
                    return viewHolder0;
                case 1:
                    View view1=LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item_1,null);
                    MyViewHolder1 viewHolder1=new MyViewHolder1(view1);
                    return viewHolder1;
            }
            return null;
        }

2、在onBindViewHolder方法中
用switch…case…得到左右兩邊的類型
這裏寫圖片描述

3、再創建兩個不同的ViewHolder的類,都繼承RecyclerView.ViewHolder
這裏寫圖片描述

源碼如下:

package com.xiaogao.user.android2lesson_09_recycler2;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
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 java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    //聲明一個數據集合,用來處理數據
    private List<MyData>list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView= (RecyclerView) findViewById(R.id.main_recyclerView);
        //設置線性佈局管理器類型
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        //創造數據
        createData();

        MyAdapter adapter=new MyAdapter();
        recyclerView.setAdapter(adapter);
    }

    //創造數據
    private void createData() {
        list=new ArrayList<>();
        MyData data1=new MyData("hey,man",R.drawable.zuo,0);
        MyData data2=new MyData("hey,woman",R.drawable.you,1);
        MyData data3=new MyData("what are you 弄啥呢",R.drawable.you,1);
        MyData data4=new MyData("I want to 那個",R.drawable.zuo,0);

        list.add(data1);
        list.add(data2);
        list.add(data3);
        list.add(data4);

    }

    class MyData{
        String text;
        int image;
        //標誌消息的類型
        int type;
        public MyData(String text,int image,int type){
            this.text=text;
            this.image=image;
            this.type=type;
        }
    }
    //創建一個Adapter
    class MyAdapter extends RecyclerView.Adapter{

        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            switch (viewType){
                case 0:
                    View view=LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item_0,null);
                    MyViewHolder0 viewHolder0=new MyViewHolder0(view);
                    return viewHolder0;
                case 1:
                    View view1=LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item_1,null);
                    MyViewHolder1 viewHolder1=new MyViewHolder1(view1);
                    return viewHolder1;
            }
            return null;
        }
        //返回viewHolder的類型


        @Override
        public int getItemViewType(int position) {
            return list.get(position).type;
        }

        @Override
        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
            //獲取數據得到類型
            MyData data=list.get(position);
            int type=data.type;
            switch (type){
                case 0:
                    MyViewHolder0 holder0= (MyViewHolder0) holder;
                    holder0.tv0.setText(data.text);

                    break;
                case 1:
                    MyViewHolder1 holder1= (MyViewHolder1) holder;
                    holder1.tv1.setText(data.text);
                    break;
            }



        }

        @Override
        public int getItemCount() {
            return list.size();
        }
        //創建佈局不同的ViewHolder
        class MyViewHolder0 extends RecyclerView.ViewHolder{
            TextView tv0;
            ImageView iv0;
            public MyViewHolder0(View itemView) {
                super(itemView);
                tv0= (TextView) itemView.findViewById(R.id.list_item_0_tv);
                iv0= (ImageView) itemView.findViewById(R.id.item_0_iv);
            }
        }
        class MyViewHolder1 extends RecyclerView.ViewHolder{
            TextView tv1;
            ImageView iv1;
            public MyViewHolder1(View itemView) {
                super(itemView);
                tv1= (TextView) itemView.findViewById(R.id.list_item_1_tv);
                iv1= (ImageView) itemView.findViewById(R.id.item_1_iv);
            }
        }

    }
}
發佈了31 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章