【问题标题】:Remove items from different Lists with same Menu从具有相同菜单的不同列表中删除项目
【发布时间】:2013-08-12 18:56:26
【问题描述】:

我在一个活动中有两个列表视图,我想使用 ContextMenu 从其中一个中删除项目。我想使用相同的上下文菜单,可以吗?我在看这里,但所有答案都指向两个不同的上下文菜单。谢谢!!!

这是我的代码:

    //Register both ListViews
    Listview1= (ListView)findViewById(R.id.PedlstItens) ;
    Listview1.setOnCreateContextMenuListener(this);
    registerForContextMenu(Listview1);

    Listview2 = (ListView)findViewById(R.id.PedlstCartao) ;
    Listview2.setOnCreateContextMenuListener(this);
    registerForContextMenu(Listview2);

然后,膨胀菜单:

    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.layout.menu_remove, menu);
}

然后是 ContextMenu Behavior... 我不知道如何指向正确的 Listview 以删除该项目:

public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();

        ***//THIS IS WHERE I DONT KNOW WHAT TO DO***
    switch (item.getItemId()) {
        case R.id.remove_item:
            Listview1.remove(info.position);
            Listview1array.notifyDataSetChanged();
        return true;
    }
    return false;
}

【问题讨论】:

    标签: java android eclipse listview contextmenu


    【解决方案1】:

    找到解决办法:

    在“onCreateContextMenu”中,我将列表的 ID 存储在变量 ListToRemove 中:

    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
            super.onCreateContextMenu(menu, v, menuInfo);
            MenuInflater inflater = getMenuInflater();
            ListToRemove = v.getId(); //Here i store in which listview my ContextMenu was created
            inflater.inflate(R.layout.menu_remove, menu);
        }
    

    然后,在“onContextItemSelected”中,我做了一个开关来控制行为。 ***注意:我的 ContextMenu 只有一项,所以我从原始代码中删除了“getItemId()”。

    public boolean onContextItemSelected(MenuItem item) {
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
        boolean retorno = false;
    
        switch (ListToRemove ) { 
        case R.id.ListView1:
            {
                 ListView1.remove(info.position);
             ListView1Array.notifyDataSetChanged();
             retorno = true;
                 break;
            }
        case R.id.ListView2:
            {
                 ListView2.remove(info.position);
                 ListView2Array.notifyDataSetChanged();
                 retorno = true;
                 break;
            }
        }
        return retorno;
    }
    

    效果很好!!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      • 2017-04-13
      • 2017-02-21
      • 2020-03-14
      • 2016-05-09
      • 2022-07-26
      • 2014-11-09
      相关资源
      最近更新 更多