0

我有一个自定义列表适配器。我已经重载了我的 OnItemClickListener 并为我显示上下文菜单的位置添加了一个 registerForContextMenu 行。

当我选择应该显示 MenuItem 的项目时,将显示菜单。当我按下手机上的返回按钮时,菜单消失。但是现在我的列表视图中的同一个项目不再收到 OnItemClickListener 会发生什么。我说得通吗?我的意思是在菜单消失后,同一个项目不会收到点击监听器。上面和下面的项目根据需要接收事件。我似乎菜单已经消失但仍在捕捉点击事件?

4

2 回答 2

1

这不好。你必须调用方法registerForContextMenuonCreate

所以试试这样:

@Override
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.contacts);
   registerForContextMenu(<yourListView>);
   ...
}

对于创建ContextMenu你必须覆盖onCreateContextMenu方法

@Override
public void onCreateContextMenu(ContextMenu cMenu, View parent, ContextMenu.ContextMenuInfo info) {
   this.contextMenu = cMenu;
   new MenuInflater(Contacts.this).inflate(R.menu.conmenu, this.contextMenu);
}

对于选择项目覆盖onContextItemSelected方法:

@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)       item.getMenuInfo();
   switch (item.getItemId()) {
      case R.id.c_odobrat:
         deleteContactDialog(info.id);
         return true;
   }
   return false;
}

它应该有效。

于 2012-05-30T20:02:11.250 回答
0
        quickLinkListView.setOnItemClickListener(new OnItemClickListener()
        {
            @Override
            public void onItemClick(AdapterView<?> a, View v, int position, long id)
            {

                Intent intent = new Intent();
                intent.setClassName(Home.this, "com.myapp.toc" + Constants.ACT_NAMES[position]);

                if (position < 4 && position > 1)
                {

                    switch (position)
                    {

                    case 3:
                        registerForContextMenu(v);
                        ViewHolder.v=v;
                        openContextMenu(v);
                        break;
                    }
                }

            }
        });

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

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.context_home, menu);
    menu.setHeaderTitle("Select Video Type");
}
于 2012-05-30T19:58:03.947 回答