RecyclerView_多條目---點擊事件

public class MainActivity extends AppCompatActivity {

    private RecyclerView rv;
    private List<String> list;

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

        rv = (RecyclerView) findViewById(R.id.rv);

        initRV();

    }

    private void initRV() {

        // 1.初始化數據
        initData();
        // 2.創建佈局管理器
        LinearLayoutManager manger = new LinearLayoutManager(this);
        rv.setLayoutManager(manger);
        // 3.設置適配器
        final MyRVAdapter1 adapter1 = new MyRVAdapter1();
        // 4.關聯綁定數據
        rv.setAdapter(adapter1);

        // 設置動畫
        rv.setItemAnimator(new DefaultItemAnimator());
        // 系統自帶的橫線
        rv.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));

//        adapter.setOnItemClickListener(new OnItemClickListener() {
//            @Override
//            public void onItemClick(View view, int position) {
//                list.remove(position);
//                adapter.notifyDataSetChanged();
//                Toast.makeText(MainActivity.this,"已刪除:"+position,Toast.LENGTH_SHORT).show();
//            }
//        });

        adapter1.setOnItemClickListener1(new OnItemClickListener1() {
            @Override
            public void onItemClick1(View view, int position) {
                list.remove(position);
                adapter1.notifyDataSetChanged();
                Toast.makeText(MainActivity.this, "已刪除" + position, Toast.LENGTH_SHORT).show();
            }
        });

        // 添加頭部
        TextView tv = new TextView(this);
        tv.setText("啦啦啦");
        adapter1.addHeader(tv);
    }

    private void initData() {

        list = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            list.add("" + i);
        }
    }

    // RecyclerView 簡單實現——接口回調點擊刪除
    class MyRVAdapter extends RecyclerView.Adapter<MyRVAdapter.MyViewHolder> {

        OnItemClickListener listener;

        public void setOnItemClickListener(OnItemClickListener listener) {
            this.listener = listener;
        }

        @Override
        public MyRVAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

//            View view = View.inflate(MainActivity.this,R.layout.one_item,null);
            // item條目佈局充滿
            View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.one_item, parent, false);
            MyViewHolder holder = new MyViewHolder(view);

            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    listener.onItemClick(view, (Integer) view.getTag());
                }
            });

            return holder;
        }

        @Override
        public void onBindViewHolder(MyRVAdapter.MyViewHolder holder, int position) {

            holder.tv.setText(list.get(position));

            holder.itemView.setTag(position);

        }

        @Override
        public int getItemCount() {
            return list == null ? 0 : list.size();
        }

        class MyViewHolder extends RecyclerView.ViewHolder {

            TextView tv;

            public MyViewHolder(View itemView) {
                super(itemView);

                tv = itemView.findViewById(R.id.tv);

            }
        }
    }

    public interface OnItemClickListener {
        void onItemClick(View view, int position);
    }


    // RecyclerView 多條目加載——添加頭佈局——接口回調點擊刪除
    class MyRVAdapter1 extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

        public static final int TYPE_HEADER = 0;
        public static final int TYPE_ONE = 1;
        public static final int TYPE_TWO = 2;

        List<View> listHeader = new ArrayList<>();
        public void addHeader(View view){
            listHeader.add(view);
        }

        OnItemClickListener1 listener1;

        public void setOnItemClickListener1(OnItemClickListener1 listener1) {
            this.listener1 = listener1;
        }

        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

            if (viewType == TYPE_HEADER) {
                View view = View.inflate(MainActivity.this, R.layout.header_item, null);
                MyHeaderHolder headerHolder = new MyHeaderHolder(view);
                return headerHolder;
            } else if (viewType == TYPE_ONE) {
                View view = View.inflate(MainActivity.this, R.layout.one_item, null);
                MyViewHolder holder = new MyViewHolder(view);
                view.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        listener1.onItemClick1(view, (Integer) view.getTag());
                    }
                });
                return holder;
            } else {
                View view = View.inflate(MainActivity.this, R.layout.twoitem, null);
                MyViewHolder1 holder1 = new MyViewHolder1(view);
                view.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        listener1.onItemClick1(view, (Integer) view.getTag());
                    }
                });
                return holder1;
            }


        }

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

            if(holder instanceof MyHeaderHolder){
                ((MyHeaderHolder) holder).ll.removeView(listHeader.get(position));
                ((MyHeaderHolder) holder).ll.addView(listHeader.get(position));

            }
            if (holder instanceof MyViewHolder) {
                ((MyViewHolder) holder).tv.setText(list.get(position));
                holder.itemView.setTag(position);
            }

            if (holder instanceof MyViewHolder1) {
                ((MyViewHolder1) holder).tv.setText(list.get(position));
                holder.itemView.setTag(position);
            }

        }

        @Override
        public int getItemCount() {
            return list == null ? 0 : list.size();
        }

        @Override
        public int getItemViewType(int position) {

            if(position < listHeader.size()){
                return TYPE_HEADER;
            }else if (position % 2 == 0) {
                return TYPE_ONE;
            } else {
                return TYPE_TWO;
            }

        }

        class MyHeaderHolder extends RecyclerView.ViewHolder {

            LinearLayout ll;

            public MyHeaderHolder(View itemView) {
                super(itemView);

                ll = itemView.findViewById(R.id.ll);
            }
        }

        class MyViewHolder extends RecyclerView.ViewHolder {

            TextView tv;

            public MyViewHolder(View itemView) {
                super(itemView);

                tv = itemView.findViewById(R.id.tv);
            }
        }

        class MyViewHolder1 extends RecyclerView.ViewHolder {

            TextView tv;
            ImageView iv;

            public MyViewHolder1(View itemView) {
                super(itemView);

                tv = itemView.findViewById(R.id.tv);
                iv = itemView.findViewById(R.id.iv);
            }
        }
    }

    public interface OnItemClickListener1 {
        void onItemClick1(View view, int position);
    }


}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章