【问题标题】:Android: Listview long hold context menu issueAndroid:Listview长期持有上下文菜单问题
【发布时间】:2014-09-12 16:54:17
【问题描述】:

在长时间按住列表视图条目并显示各种选项后,我正在尝试打开上下文菜单。 但是,只要持有没有做/调用任何事情,我就无法做到。

这是我用来调用上下文菜单的代码:

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

    MenuItem delete = menu.add("delete");
    MenuItem edit = menu.add("edit");
    delete.setOnMenuItemClickListener(new OnMenuItemClickListener() {
        public boolean onMenuItemClick(MenuItem item) {
            return true;
        }
    });
    edit.setOnMenuItemClickListener(new OnMenuItemClickListener() {
        public boolean onMenuItemClick(MenuItem item) {
            return true;
        }
    });
}

我也尝试过,但也无济于事:

@Override
public void onCreateContextMenu(ContextMenu menu, 
                View v, ContextMenuInfo menuInfo) {
    menu.add(0, 1, 0, "Edit");
    menu.add(0, 2, 1, "Rename");
    menu.add(0, 3, 2, "Delete");
    super.onCreateContextMenu(menu, v, menuInfo);
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    super.onContextItemSelected(item);

    if(item.getTitle().equals("Edit")) {
        //Edit code
    } else if(item.getTitle().equals("Rename")) {
        //Rename code
    } else if(item.getTitle().equals("Delete")) {
        //Delete code
    }
    return true;
};

MainActivity 代码(仅相关部分):

public class MainActivity extends Activity {
    private List<CountElement> myElements = new ArrayList<CountElement>();
    ListView list;
    ArrayAdapter<CountElement> adapter;

    /*
    Users enters needed listview items, code not shown here. It works fine however - 
    all needed elements are displayed correctly.
    */

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        adapter = new MyListAdapter();
        list = (ListView) findViewById(R.id.listView1);
        list.setAdapter(adapter);
        registerForContextMenu(list);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);

        MenuItem delete = menu.add("delete");
        MenuItem edit = menu.add("edit");
        delete.setOnMenuItemClickListener(new OnMenuItemClickListener() {
            public boolean onMenuItemClick(MenuItem item) {
                return true;
            }
        });
        edit.setOnMenuItemClickListener(new OnMenuItemClickListener() {
            public boolean onMenuItemClick(MenuItem item) {
                return true;
            }
        });
    }

    private class MyListAdapter extends ArrayAdapter<CountElement> {
        //Custom adapter code here
    }
}

非常感谢任何帮助。谢谢!

【问题讨论】:

  • 不应该将上下文菜单添加到适配器上的项目而不是列表视图?
  • 我不这么认为,因为 registerForContextMenu 需要一个 View 参数。我可能错了。
  • 而且行也是视图 :) 我认为这里的问题是来自列表视图的滚动事件正在拦截 longpress 事件。
  • 知道如何解决这个问题吗? (即这样滚动不会拦截长按)。如果需要,我可以显示“MyListAdapter”代码。
  • 好吧,我想通了。在我的自定义 listAdapter 中,我在 listView 上添加了一个 setOnItemLongClickListener。这个 setOnItemLongClickListener 显示了一个带有我需要的选项的警报。感谢您提供的帮助!

标签: java android listview contextmenu


【解决方案1】:

好吧,我能弄明白。在我的自定义 listAdapter 中,我在 listView 上添加了一个 setOnItemLongClickListener。这个 setOnItemLongClickListener 显示了一个带有我需要的选项的警报。因此:

list.setOnItemLongClickListener(new OnItemLongClickListener() { //list is my listView

            @Override
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                    final int pos, long id) {
            //Whatever you wanna do
            }
 });

【讨论】:

    【解决方案2】:

    看到这个http://developer.android.com/guide/topics/ui/menus.html#context-menu。您必须在菜单文件夹中创建自己的菜单,然后您必须在 onCreateContextMenu() 方法中对其进行膨胀。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多