contextMenu的java实现
要实现的效果如手机的通讯录长按一个联系人,弹出一个上下文菜单项,点击上下文菜单项实现对应功能。因通讯录是一个ListView,所以在MainActivity.xml中放置一个ListView。在MainActivity.java中,首先找到这个ListView,然后为这个ListView配置Adapter。接着为ListView注册contextMenu,registerforContextMenu(ListView)。然后实现两个重要的函数OnCreateContextMenu和onContextItemSelected。第一个函数是用来实现上下文菜单,在这个函数中首先要获取Adapter,然后设置菜单栏标题和内容。在第二个函数中来响应上下文菜单中条目的点击。
public class MainActivity extends AppCompatActivity {
private ArrayList<String> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//生成数据
list = new ArrayList<>();
for (int i = 0; i < 2; i++) {
list.add("ssss" + i);
}
//找到控件
ListView lv = findViewById(R.id.listview);
//配置适配器
lv.setAdapter(new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_expandable_list_item_1, list));
//注册上下文菜单
registerForContextMenu(lv);
}
@Override//重写的生成上下文菜单
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
//获取适配器
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
//设置标题
menu.setHeaderTitle(list.get(info.position));
//设置内容 参数1为分组,参数2对应条目的id,参数3是指排列顺序,默认排列即可
menu.add(0, 1, 0, "删除");
menu.add(0, 2, 0, "编辑");
menu.add(0, 3, 0, "加入黑名单");
}
@Override//添加上下文菜单选项长按监听
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 1 :
Toast.makeText(MainActivity.this,"删除成功",Toast.LENGTH_LONG).show();
break;
case 2:
break;
case 3:
break;
}
return super.onContextItemSelected(item);
}
}