上下文菜单

MainActivity

public class MainActivity extends AppCompatActivity {
    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv=(TextView)findViewById(R.id.tv);
        registerForContextMenu(tv);//2、给指定控件注册上下文菜单
    }

    /*1、创建上下文菜单*/
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        //加载菜单文件
        getMenuInflater().inflate(R.menu.menu1,menu);
        //添加菜单项,参数1.分组id,2.菜单项id,3.排序,数字越大越在上面,4.菜单的标题
        menu.add(1,1,6,"菜单1");
        menu.add(1,2,5,"菜单2");
        menu.add(1,3,4,"菜单3");
        //对组设置样式(是否选中以及单选或多选),参数1,组的id,2.是否被选中的样式,3.true为单选,false为多选
        menu.setGroupCheckable(1,true,false);
        //添加含有子菜单的项
        SubMenu sub = menu.addSubMenu(2, 4, Menu.NONE, "子菜单4");
        //添加子菜单
        sub.add(3,5,Menu.NONE,"我是菜单1");
        sub.add(3,6,Menu.NONE,"我是菜单2");
    }
    /*上下文菜单被选中事件*/
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.item1://字体变大
                tv.setTextSize(24);
                break;
            case R.id.item2://字体颜色
                tv.setTextColor(Color.RED);
                break;
            case 1://选中菜单1

                break;
            case R.id.item3://跳转
                Intent intent=new Intent(MainActivity.this,Main2Activity.class);
                startActivity(intent);
                break;
        }
        return super.onContextItemSelected(item);
    }
}
Main2Activity

public class Main2Activity extends AppCompatActivity {
    private ListView lv;
    List> list=new ArrayList<>();
    SimpleAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        lv=(ListView)findViewById(R.id.lv);
        for (int i=0;i<20;i++){
            Map map=new HashMap<>();
            map.put("id",String.valueOf(i));
            map.put("name","我是"+i);
            list.add(map);
        }
        //实例化SimpleAdapter,作用是加载2列以上的数据
        //参数1.上下文对象,2.数据源,3.行要加载的布局文件,4.从哪个键上取值,5.放到哪个控件上,
        adapter=new SimpleAdapter(this,list,R.layout.list_item,
                new String[]{"id","name"},new int[]{R.id.tv_id,R.id.tv_name});
        lv.setAdapter(adapter);
        registerForContextMenu(lv);//注册上下文菜单

    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.add(1,1, Menu.NONE,"增加");
        menu.add(1,2, Menu.NONE,"删除");
        menu.add(1,3, Menu.NONE,"修改");
        menu.add(1,4, Menu.NONE,"查看详情");
    }

    /*做删除,1.获取索引,2.从List数据源中删掉索引对应的项,3.刷新ListView*/
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        //获取菜单项的菜单信息,并强制转换为AdapterContextMenuInfo,
        AdapterView.AdapterContextMenuInfo info=(AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
        int position = info.position;//取出litView对应的索引
        switch (item.getItemId()){
            case 1://增加

                break;
            case 2://删除
                //从数据源中删除索引对应的项
                list.remove(position);
                //刷新数据
                adapter.notifyDataSetChanged();
                break;
            case 3://修改

                break;
            case 4://查看详情

                break;
        }
        return super.onContextItemSelected(item);
    }
}

activity_main



    

activity_main2


    

list_item


    
    





你可能感兴趣的:(上下文菜单)