安卓 多种item的RecyclerView(新手笔记-15)

首先为传入的数据创建一个实体对象。

public class MultiItemEntity {
    public List<MultiItem1> multiItem1s;
    public List<MultiItem2> multiItem2s;

    public  MultiItemEntity(){
        multiItem1s = new ArrayList<>();
        multiItem2s = new ArrayList<>();
    }

    public static class MultiItem1 {
        public String username;
        public String password;

        public MultiItem1(String username, String password){
            this.username = username;
            this.password = password;
        }
    }

    public static class MultiItem2 {
        public String tel;
        public String email;
        public String note;

        public MultiItem2(String tel, String email, String note){
            this.tel = tel;
            this.email = email;
            this.note = note;
        }
    }
}

之后配置适配器(这里我用了一个进度条做结尾,如果不结尾会出现空指针问题):

public class MultiRecyclerViewAdapter extends RecyclerView.Adapter {

    private final int ONE = 1;
    private final int TWO = 2;
    private final int THREE = 3;

    private Context context;
    private MultiItemEntity datas;
    private LayoutInflater layoutInflater;
    private MultiRecyclerViewListener multiRecyclerViewListener;

    public MultiRecyclerViewAdapter(Context mConText, MultiItemEntity mdatas){
        this.context = mConText;
        this.datas = mdatas;
        layoutInflater = LayoutInflater.from(mConText);
    }

    class ViewHolder1 extends RecyclerViewAdapter.ViewHolder{

        TextView username;
        TextView password;

        public ViewHolder1(View itemView) {
            super(itemView);
            username = itemView.findViewById(R.id.username_item);
            password = itemView.findViewById(R.id.password_item);
        }
    }

    class ViewHolder2 extends RecyclerViewAdapter.ViewHolder{

        TextView tel;
        TextView email;
        TextView note;

        public ViewHolder2(View itemView) {
            super(itemView);
            tel = itemView.findViewById(R.id.tel_item);
            email = itemView.findViewById(R.id.email_item);
            note = itemView.findViewById(R.id.note_item);
        }
    }

    class ViewHolder3 extends RecyclerView.ViewHolder{

        ProgressBar progressBar;
        TextView progress_text;

        public ViewHolder3(View itemView) {
            super(itemView);
            progressBar = itemView.findViewById(R.id.progress_bar);
            progress_text = itemView.findViewById(R.id.progress_text);
        }
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = new View(parent.getContext());
        if(viewType == ONE){
            view = layoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_item_list, parent, false);
            return new ViewHolder1(view);
        }else if(viewType == TWO){
            view = layoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_item_list_2, parent, false);
            return new ViewHolder2(view);
        }else{
            view = layoutInflater.from(parent.getContext()).inflate(R.layout.progressbar_layout, parent, false);
            Log.v("aaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaa");
            return new ViewHolder3(view);
        }
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

        if(holder instanceof ViewHolder1){
            ((ViewHolder1) holder).username.setText(datas.multiItem1s.get(position).username);
            ((ViewHolder1) holder).password.setText(datas.multiItem1s.get(position).password);
        }else if(holder instanceof  ViewHolder2){
            int position2 = position - datas.multiItem1s.size();
            ((ViewHolder2) holder).tel.setText(datas.multiItem2s.get(position2).tel);
            ((ViewHolder2) holder).email.setText(datas.multiItem2s.get(position2).email);
            ((ViewHolder2) holder).note.setText(datas.multiItem2s.get(position2).note);
        }else if(holder instanceof ViewHolder3){

            ((ViewHolder3) holder).progressBar.setIndeterminate(true);
        }
    }

    @Override
    public int getItemViewType(int position) {
        if(datas == null){
            return super.getItemViewType(position);
        }
        int count1;
        if(datas.multiItem1s == null){
            count1 = 0;
        }else{
            count1 = datas.multiItem1s.size();
        }

        int count2;
        if(datas.multiItem2s == null){
            count2 = 0;
        }else{
            count2 = datas.multiItem2s.size();
        }

        if(position < count1){
            return ONE;
        }else if(position < count1 + count2){
            return TWO;
        }else{
            return THREE;
        }
    }

    @Override
    public int getItemCount() {
        if(datas == null){
            return 0;
        }

        int count1;
        if(datas.multiItem1s == null){
            count1 = 0;
        }else {
            count1 = datas.multiItem1s.size();
        }
        int count2;
        if(datas.multiItem2s == null){
            count2 = 0;
        }else {
            count2 = datas.multiItem1s.size();
        }

        return count1 + count2;
    }

    public interface MultiRecyclerViewListener{
        void MultiRecyclerViewOnClick(int position, int type);
    }

    public void setMultiRecyclerViewListener(MultiRecyclerViewListener multiRecyclerViewListener1){
        this.multiRecyclerViewListener = multiRecyclerViewListener1;
    }
}

在Activity中,我们需要设置数据,然后将其导入Adapter:

public class ThirdFragment extends Fragment {

    public View view;
    public RecyclerView recyclerView;
    public MultiItemEntity datas;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        //避免同一activity下 多个fragment 切换时重复执行onCreateView方法
        // Fragment之间切换时每次都会调用onCreateView方法,导致每次Fragment的布局都重绘,无法保持Fragment原有状态。
        if (view == null) {
            view = inflater.inflate(R.layout.third_fragment, container, false);
        } else {
            ViewGroup parent = (ViewGroup) view.getParent();
            if (null != parent) {
                parent.removeView(view);
            }
        }

        initDatas();

        recyclerView = view.findViewById(R.id.recyclerView_fragment3);

        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(view.getContext());
        recyclerView.setLayoutManager(linearLayoutManager);

        MultiRecyclerViewAdapter multiRecyclerViewAdapter = new MultiRecyclerViewAdapter(view.getContext(),datas);

        recyclerView.setAdapter(multiRecyclerViewAdapter);
        recyclerView.addItemDecoration(new DividerItemDecoration(view.getContext(),
                DividerItemDecoration.VERTICAL_LIST));

        return view;
    }

    private void initDatas() {
        datas = new MultiItemEntity();
        datas.multiItem1s.add(new MultiItemEntity.MultiItem1("happy","123456"));
        datas.multiItem1s.add(new MultiItemEntity.MultiItem1("sad","464854"));
        datas.multiItem1s.add(new MultiItemEntity.MultiItem1("anger","3415123"));
        datas.multiItem1s.add(new MultiItemEntity.MultiItem1("excite","432414"));
        datas.multiItem1s.add(new MultiItemEntity.MultiItem1("diss","645356"));
        datas.multiItem1s.add(new MultiItemEntity.MultiItem1("exhausted","549815"));
        datas.multiItem2s.add(new MultiItemEntity.MultiItem2("123","adf@g.com","null"));
        datas.multiItem2s.add(new MultiItemEntity.MultiItem2("435","asdfsff@g.com","aaaa"));
        datas.multiItem2s.add(new MultiItemEntity.MultiItem2("156489","adbrbbf@g.com","sdes"));
        datas.multiItem2s.add(new MultiItemEntity.MultiItem2("8997","agbrbf@g.com","99"));
        datas.multiItem2s.add(new MultiItemEntity.MultiItem2("234","15185@g.com","158"));

    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }


}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值