【问题标题】:Android ListView can't click ItemAndroid ListView 无法点击项目
【发布时间】:2012-06-07 06:25:38
【问题描述】:

我有一个 ListView。我实现了 OnItemClickListener 以在单击项目时打开 ContextMenu。

lv = getListView();
    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            showMenu(view);
        }
    });

以及创建菜单的代码。

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

public void showMenu(View v) {
    registerForContextMenu(v);
    openContextMenu(v);
}

我的问题是,当我单击 ListView 的一项时,它确实打开了菜单。但是,如果我返回 ListView,我将无法再次单击该项目。其他项目同理,关闭菜单后无法点击。谁能帮我解决这个问题?

【问题讨论】:

  • 这里的openContextMenu(v); 是什么?
  • @SpK: 点击项目时打开菜单。
  • 我认为 registerForContextMenu(listView);
  • 欢迎来到 SO。如果以下答案之一解决了您的问题,您应该接受它(单击相应答案旁边的复选标记)。这有两件事。它让每个人都知道您的问题已得到解决,并让帮助您的人获得帮助。

标签: android android-listview


【解决方案1】:

您的设置不正确。设置适配器时注册上下文菜单,而不是单击按钮。

应该是这样的:

setListAdapter(lists);
registerForContextMenu(getListView());

然后你就有了 onCreateContextMenu 和 onContextItemSelected 方法(我以编程方式创建我的方法,但你的膨胀一个也可以工作):

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    menu.setHeaderTitle("List Operations");
    menu.add(0, v.getId(), 0, "Edit List");
    menu.add(0, v.getId(), 0, "Delete List");
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
            .getMenuInfo();
    if (item.getTitle() == "Edit List") {
      //  Do your edit stuff here
    } else if (item.getTitle() == "Delete List") {
      // Do your delete stuff here
    }
    return super.onContextItemSelected(item);
}

您不需要使用onItemClick,除非您想在短按项目时执行某些操作(上下文菜单是长按)。

【讨论】:

  • 不,我想要的是当我单击项目(短按)时,它会打开菜单。我插入 registerForContextMenu(getListView());进入我的代码,但是当我单击该项目时,它没有打开菜单或任何东西
  • 好的,我解决了。在 onItemClick 中,我只需要添加 openContextMenu(getListView()),然后它会在短按时打开菜单。谢谢
【解决方案2】:

以下代码将起作用。

代码:

  ListView listview=(ListView)findViewByid(R.id.listview);

   /**** here write appending data to listview*******/
     ArrayAdapter<String> adp=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,/**your list items**/);
     listview.setadapter(adp);
     registerForContextMenu(listview);

   //listview item click listener
  listview.setOnItemClickListener(new OnItemClickListener(){

@Override
public void onItemClick(AdapterView<?> arg0, View v, int p, long arg3) {
    // TODO Auto-generated method stub

 Toast.makeText(getApplicationContext(), "selected" + p, 30).show();
}});

   /****do your context menu code here*******/

【讨论】:

  • listview.setadapter(adp)中的adp是什么;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
相关资源
最近更新 更多