0

我在Android中有一个应用程序,

此应用程序有一个带有此事件的 ListView。

ListView titulos = (ListView)findViewById(R.id.lv_titulos);
    titulos.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {
            position_item_selected = position;
            switch (position){
               case 0:
                    titulo = getString(R.string.Brands);
                    menu_contextual = rellenar_menu_contextual(brands);
                    break;
               case 1:
                    titulo = getString(R.string.Collections);
                    menu_contextual = rellenar_menu_contextual(collections);
                    break;
               case 2:
                   titulo = getString(R.string.References);
                   menu_contextual = rellenar_menu_contextual(references);
                   break;
               case 3:
                   titulo = getString(R.string.Colours);
                   menu_contextual = rellenar_menu_contextual(colours);
                   break;
               case 4:
                   titulo = getString(R.string.Sizes);
                   menu_contextual = rellenar_menu_contextual(sizes);
                   break;
           }
            registerForContextMenu(view);
            openContextMenu(view);
            unregisterForContextMenu(view);
        }
    });

如果您单击列表视图中的项目,然后单击它显示的上下文菜单上的项目,则此操作很好,但是如果您单击列表视图上的项目,然后,当显示上下文菜单时,如果您单击后退按钮并返回要查看,您不能再次单击列表视图中的项目。

如果您单击其他项目,然后单击上下文菜单中的某个项目,所有项目都会再次正常工作。

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    menu.setHeaderTitle(titulo);
    for (String aMenu_contextual : menu_contextual) menu.add(0, v.getId(), 0, aMenu_contextual);
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterView.AdapterContextMenuInfo info =
            (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    String[][] values;
    switch (position_item_selected){
        case 0:
            values = new String[][] {{getString(R.string.Brand),item.toString()}};
            brandSelec = item.toString();
            collections(brands.get(item.toString()).toString());
            break;
        (...)
        default:
            values = new String[][] {};
    }
    final StableArrayAdapter adapter = new StableArrayAdapter(SearchArticle.this,values);
    ListView titulos = (ListView)findViewById(R.id.lv_titulos);
    titulos.setAdapter(adapter);
    return true;
}

当您在上下文菜单中按下后退按钮时,为什么列表视图中的项目会阻塞?

对不起我的英语不好,谢谢你。

4

1 回答 1

0

这段代码是有问题的部分:

registerForContextMenu(view);
openContextMenu(view);
unregisterForContextMenu(view);

不仅您注册然后取消注册,而且您在单击列表中的项目时执行此操作。

我不明白你在这里试图做什么,但这是正确的方法:

... onCreate() {
...
registerForContextMenu(listView);

这样,长按一个项目就会显示上下文菜单,就像它在任何其他应用程序上的工作方式一样。

于 2013-08-24T22:45:06.683 回答