為RecyclerView新增ContextMenu
阿新 • • 發佈:2018-11-27
這裡要實現的是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);
}
}
}