Android ListView ContextMenu没有出现

时间:2012-05-30 19:34:01

标签: android listview contextmenu

我有一个CustomListAdapter。我已经重载了我的OnItemClickListener并为我所显示的上下文菜单的位置添加了一个registerForContextMenu行。

当我选择应显示MenuItem的项目时,会显示菜单。当我按下手机上的后退按钮时,菜单消失。但是现在我的列表视图中的相同项目不再接收OnItemClickListener会发生什么。我有意义吗?我的意思是在菜单消失后,同一项目不会收到点击监听器。上方和下方的项目根据需要接收活动。我好像菜单已经消失但仍然在捕捉点击事件?

2 个答案:

答案 0 :(得分:1)

这很糟糕。您必须在registerForContextMenu方法中致电onCreate

所以试试这样:

@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;
}

它应该有效。

答案 1 :(得分: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");
}