2012-09-13 86 views
1
registerForContextMenu(validate_button); 
@Override 
    public void onCreateContextMenu(ContextMenu menu, View v, 
      ContextMenu.ContextMenuInfo menuInfo) { 

     menu.add("It's right"); 
     menu.add("It's wrong"); 
    } 

    @Override 
    public boolean onContextItemSelected(android.view.MenuItem item) { 
     //i want to show another Context Menu to select next answer 
     return true; 
    } 

如何显示另一个ContextMenu当我点击第一个ContextMenu?的项目时。当第一次点击时打开另一个ContextMenu项目

它像一个提问者,你选择从ContextMenu项目的答案,这取决于未来ContextMenu项目必须填充

回答

4

如何显示另一个文本菜单当我点击第一 文本菜单的项目?

我不知道你想有多深ContextMenu是但两个层次,你可以有一个布尔标志,这两种情况下,将从onContextItemSelected更新之间进行选择:

boolean flag = true; 

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
     ContextMenu.ContextMenuInfo menuInfo) { 
    if (flag) { 
     menu.add("It's right"); 
     menu.add("It's wrong"); 
    } else { 
     // the second menu 
     menu.add("Ha Ha"); 
    } 
} 

然后在onContexItemSelected回调简单地更新标志,并发布一个Runnable到再次ContextMenu显示:反正

@Override 
public boolean onContextItemSelected(MenuItem item) { 
     if (item.getItemId() == theIdOfItemFromSecondContextMenu) { 
     // do stuff 
     return true; 
    } 
    // if you pass at this level, then you need to show the second ContextMenu 
    flag = false; 
    theView.post(new Runnable() { 

     @Override 
     public void run() { 
      theView.showContextMenu(); 
     } 
    }); 
    return true; 
} 

,我建议不要这样ç并且只需使用自定义Dialog(或DialogFragment即可为用户循环播放一个后台堆栈)。

+0

in onContextItemSelected flag = false ;.对?? –

+0

@ Archie.bpgc是的,一个简单的错误。 – Luksprog

+0

但是,当我点击第二个ContextMenu的项目时,它会再次触发onContextItemSelected并再次打开第二个菜单? –

相关问题