利用RecycleView实现类似ListView的Item点击,长按等操作事件以及点击后每一项在添加一个列表

        最近因为业务需求需要设计利用RecycleView实现类似ListView的Item点击,长按等操作事件以及点击后每一项在添加一个列表,偷懒不想写,网上找了一个(链接:http://blog.csdn.net/xiaowang900716/article/details/47037019),不适合新手,故自己写了一个,主要实现功能有单击添加一个下拉列表,同时可增加一个item,改变点击item的状态,长按弹出对话框,点击对话框的按钮操作Item,可实现增删改查等操作,同时可显示当时点即iten的不同状态(背景颜色),仅供参考;

         先看效果图,没美化,程序员的审美


       比较简单,直接上代码,,XML布局文件简单就补贴了,activity_main 里面就仿一个Recycleview,然后设置每一项的布局文件layout_item,

在最下面一定要添加一个容器,可以是

LinearLayout, RelativeLayout等,如下
<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
    ......   
    </LinearLayout>

    <LinearLayout
        android:id="@+id/goneLayout"
        android:background="#77ff0000"
        android:layout_marginTop="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/linearLayout"
        android:orientation="vertical">

    </LinearLayout>


</android.support.v7.widget.CardView>
</span>

然后再来一个想要添加到Item下面的具体布局即可,你懂得大笑


以下是实现的主业务代码,首先最主要的显示自定义的Adapter,

<span style="font-size:18px;">public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    private Context context;
    private List<Item> mItemList;
    private List<Item> data;
    private TextView t4, t5, t6, t7;

    public MyAdapter(Context context, List<Item> mItemList) {
        this.context = context;
        this.mItemList = mItemList;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {//此处模拟数据,具体实现可通过Adapter传递
        data = new ArrayList<>();
        data.add(new Item(111, "BBBBBBBBB", "OOOOOOOOOOOOOOO", true));
        data.add(new Item(666, "BBBBBBBBB", "OOOOOOOOOOOOOOO", true));
        data.add(new Item(666, "BBBBBBBBB", "OOOOOOOOOOOOOOO", false));
        data.add(new Item(666, "BBBBBBBBB", "OOOOOOOOOOOOOOO", true));
        data.add(new Item(666, "BBBBBBBBB", "OOOOOOOOOOOOOOO", false));
        data.add(new Item(666, "BBBBBBBBB", "OOOOOOOOOOOOOOO", true));
        data.add(new Item(666, "BBBBBBBBB", "OOOOOOOOOOOOOOO", false));
        data.add(new Item(622266, "BBBBBBBBB", "OOOOOOOOOOOOOOO", true));
        View inflate = LayoutInflater.from(context).inflate(R.layout.layout_item, parent, false);
        return new MyViewHolder(inflate);
    }


    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        holder.t1.setText(mItemList.get(position).getIs() + "");
        holder.t2.setText(mItemList.get(position).getName() + "");
        holder.t3.setText(mItemList.get(position).getPass() + "");
        if (mItemList.get(position).isGender()) {
            holder.radioButton.setText("男");
            holder.radioButton.setBackgroundColor(Color.RED);
        } else {
            holder.radioButton.setText("女");
            holder.radioButton.setBackgroundColor(Color.YELLOW);
        }
        int pos = holder.getLayoutPosition();
        holder.bind(pos);
        holder.goneLayout.removeAllViewsInLayout();//设置recyccleView的每一项

        for (int i = 0; i < data.size(); i++) {
//              要添加的每一项的布局文件,必须在循环内定义,否则报错
            View inflate = LayoutInflater.from(context).inflate(R.layout.item, null);
            inflate.setPadding(0,10,0,5);
            t4 = (TextView) inflate.findViewById(R.id.textView4);
            t5 = (TextView) inflate.findViewById(R.id.textView5);
            t6 = (TextView) inflate.findViewById(R.id.textView6);
            t7 = (TextView) inflate.findViewById(R.id.textView7);
            t4.setText(data.get(i).getIs() + "     " + pos);
            t5.setText(data.get(i).getName());
            t6.setText(data.get(i).getPass() + "");
            if (data.get(i).isGender()) {
                t7.setText("OK");
                t7.setBackgroundColor(Color.CYAN);
            } else {
                t7.setText("NOT");
                t7.setBackgroundColor(Color.YELLOW);
            }
            holder.goneLayout.addView(inflate);//设置每一个item下面的动态添加布局
        }
    }

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

    private int opened = -1;

    class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
        private TextView t1, t2, t3;
        private TextView radioButton;
        private LinearLayout goneLayout;

        public MyViewHolder(View itemView) {
            super(itemView);
            t1 = (TextView) itemView.findViewById(R.id.textView);
            t2 = (TextView) itemView.findViewById(R.id.textView2);
            t3 = (TextView) itemView.findViewById(R.id.textView3);
            radioButton = (TextView) itemView.findViewById(R.id.radioButton);
            goneLayout = (LinearLayout) itemView.findViewById(R.id.goneLayout);//此为item下的布局容器

            itemView.setOnClickListener(this);//设置单击事件
            itemView.setOnLongClickListener(this);//设置长击击事件
        }


        public void bind(int pos) { // 此方法实现列表的展开和关闭

            if (pos == opened)
                goneLayout.setVisibility(View.VISIBLE);
            else
                goneLayout.setVisibility(View.GONE);
        }

        @Override
        public void onClick(View v) {

            if (opened == getAdapterPosition()) {//更改Item不同状态的属性
                opened = -1;
                mItemList.add(getAdapterPosition()+1, new Item(22222, "DDD", "sdsd", true));//具体业务的实现
                notifyItemRangeChanged(getAdapterPosition(), getItemCount());//刷新Position之后的数据
                v.setBackgroundColor(Color.YELLOW);
                notifyItemChanged(getAdapterPosition());
            } else {
                int oldOpened = opened;
                opened = getAdapterPosition();
                notifyItemChanged(oldOpened);
                v.setBackgroundColor(Color.RED);

                notifyItemChanged(opened);//即时更新
            }

        }

        @Override
        public boolean onLongClick(final View v) {
            new AlertDialog.Builder(v.getContext()).setTitle("SSSSS")
                    .setNegativeButton("确定", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(v.getContext(), "mItemList.get(which):" + mItemList.get(getAdapterPosition()) + "JKL", Toast.LENGTH_SHORT).show();
                            v.setBackgroundColor(Color.MAGENTA);
                        }
            })
                    .setPositiveButton("取消", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
//                     具体业务实现
                            System.out.println(getAdapterPosition()+"");
                            mItemList.remove(getAdapterPosition());
                            notifyItemRangeChanged(getAdapterPosition(), getItemCount());//刷新Position之后的数据(删除)
                        }
            }).setView(new EditText(v.getContext())).show();//显示dialog
            return false;
        }
    }
}
</span>
      然后在MainActivity中初始化RecycleAdapter,用过的人都会的,大笑
<span style="font-size:18px;">   LinearLayoutManager manager=new LinearLayoutManager(this);
        manager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(manager);
        MyAdapter adapter=new MyAdapter(this,mItemList);
        recyclerView.setAdapter(adapter);</span>


偶偶,完事。。。。。。。。。。。。。。。希望能帮助各位,望支持啊,谢谢

对了,Demo地址点击打开链接  欢迎光临大笑


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个使用RecyclerView实现item点击事件的Java代码示例: ```java public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { private List<String> mDataList; public MyAdapter(List<String> dataList) { mDataList = dataList; } public interface OnItemClickListener { void onItemClick(View view, int position); } private OnItemClickListener mOnItemClickListener; public void setOnItemClickListener(OnItemClickListener listener) { mOnItemClickListener = listener; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false); final MyViewHolder viewHolder = new MyViewHolder(itemView); viewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mOnItemClickListener != null) { mOnItemClickListener.onItemClick(viewHolder.itemView, viewHolder.getAdapterPosition()); } } }); return viewHolder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.mTextView.setText(mDataList.get(position)); } @Override public int getItemCount() { return mDataList.size(); } class MyViewHolder extends RecyclerView.ViewHolder { TextView mTextView; MyViewHolder(View itemView) { super(itemView); mTextView = itemView.findViewById(R.id.tv_item); } } } ``` 在上述代码中,我们定义了一个`MyAdapter`类,它继承自`RecyclerView.Adapter`。通过实现`onCreateViewHolder`、`onBindViewHolder`和`getItemCount`方法来创建和绑定列表项。我们还定义了一个`OnItemClickListener`接口,当列表项被点击时,我们会回调该接口中的`onItemClick`方法。在`onCreateViewHolder`方法中,我们为每个列表项的`itemView`设置了一个点击事件监听器,当该项被点击时,我们会调用`mOnItemClickListener.onItemClick`方法来回调接口中的方法。 在使用上述代码时,您需要实例化`MyAdapter`类,并将其设置为RecyclerView的适配器。然后,您可以通过调用`setOnItemClickListener`方法来设置列表项的点击事件监听器。在回调方法中,您可以执行您需要的逻辑操作。 注意:上述代码仅为示例代码,您需要根据您自己的需求和实际情况进行修改和调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值