版权声明:本文为博主原创文章,未经博主允许不得转载。 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);
}
}
}