为RecyclerView添加ContextMenu

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sqf251877543/article/details/77745405

这里要实现的是RecyclerView的item的长按事件与Menu关联
先看看要写的效果:
这里写图片描述

1、在res下新建menu目录,在menu目录下新建recyclerview_menu.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/item_add"
        android:title="添加"
        android:orderInCategory="1"
        app:showAsAction="never"/>
    <item
        android:id="@+id/item_modify"
        android:title="修改"
        android:orderInCategory="2"
        app:showAsAction="never"/>
    <item
        android:id="@+id/item_delete"
        android:title="删除"
        android:orderInCategory="3"
        app:showAsAction="never"/>
    <item
        android:id="@+id/item_more"
        android:title="更多"
        android:orderInCategory="4"
        app:showAsAction="never"/>
</menu>

2、关键代码:

public class DrawerLayoutActivity extends AppCompatActivity {

    private Bomb[] mBombArray = {
            new Bomb("bomb5", R.drawable.bomb5), new Bomb("bomb6", R.drawable.bomb6), new Bomb("bomb7", R.drawable.bomb7),
            new Bomb("bomb8", R.drawable.bomb8), new Bomb("bomb9", R.drawable.bomb9), new Bomb("bomb10", R.drawable.bomb10),
            new Bomb("bomb11", R.drawable.bomb11), new Bomb("bomb12", R.drawable.bomb12), new Bomb("bomb13", R.drawable.bomb13),
            new Bomb("bomb14", R.drawable.bomb14), new Bomb("bomb15", R.drawable.bomb15), new Bomb("bomb16", R.drawable.bomb16)
    };
    private List<Bomb> mBombList = new ArrayList<>();
    private CommonAdapter<Bomb> mAdapter;
    private RecyclerView mRecyclerView;

    private int mSelectPosition;

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

        initRecyclerView();
    }

    private void initRecyclerView() {
        mAdapter = new CommonAdapter<Bomb>(this,R.layout.item,mBombList) {
            @Override
            protected void convert(ViewHolder holder, Bomb bomb, final int position) {
                holder.setText(R.id.tv,bomb.name);
                //holder.setImageResource(R.id.iv,bomb.imgId);
                ImageView iv = (ImageView) holder.getConvertView().findViewById(R.id.iv);
                Glide.with(DrawerLayoutActivity.this).load(bomb.imgId).into(iv);

                //长按事件
                holder.getConvertView().setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                        mSelectPosition = position;
                        return false;
                    }
                });
            }
        };
        mRecyclerView = (RecyclerView) findViewById(R.id.revyvlerview);
        mRecyclerView.setLayoutManager(new GridLayoutManager(this,2));
        mRecyclerView.setAdapter(mAdapter);

        //为RecyclerView注册ContextMenu
        registerForContextMenu(mRecyclerView);
    }

    /**
     * 以下与 RecyclerView 的 menu 相关
     */
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.recyclerview_menu,menu);
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.item_add:
                Toast.makeText(this, "add", Toast.LENGTH_SHORT).show();
                return true;
            case R.id.item_modify:
                Toast.makeText(this, "modify", Toast.LENGTH_SHORT).show();
                return true;
            case R.id.item_delete:
                Toast.makeText(this, "delete", Toast.LENGTH_SHORT).show();
                mBombList.remove(mSelectPosition);
                mAdapter.notifyDataSetChanged();
                return true;
            case R.id.item_more:
                Toast.makeText(this, "more", Toast.LENGTH_SHORT).show();
                return true;
            default:
                return super.onContextItemSelected(item);
        }

    }
}

猜你喜欢

转载自blog.csdn.net/sqf251877543/article/details/77745405