2017-07-12 41 views
0

我想让一个菜单图标在第一次点击时响应两个不同的动作应该触发第二次点击同一菜单上的第一个动作触发另一个动作时再次点击它应该拨打的第一个动作,就像动作菜单在Android中的两种不同动作之间切换

的方法

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int _clicks = 0; 
    int count; 

    switch (item.getItemId()) { 

     case R.id.action_sort: 
      count = ++_clicks; 
      if (count == 1){ 
       Cursor cursor2 = databaseManager.queryAllInsects(BugsContract.BugsEntry.COLUMN_FRIENDLYNAME + " COLLATE NOCASE ASC"); 
       mAdapter.swapCursor(cursor2); 
       return true; 
      } if (count == 2){ 
       Cursor cursor3 = databaseManager.queryAllInsects(BugsContract.BugsEntry.COLUMN_DANGERLEVEL + " COLLATE NOCASE DESC"); 
       mAdapter.swapCursor(cursor3); 
       return true; 
      } 

     default: 
      return super.onOptionsItemSelected(item); 
    } 

} 

其实我这样做之间的反复,但一旦得到它的第二次点击,它不会切换回第一个功能,即无法再次点击。任何人都可以帮助你。我最坚持的操作栏菜单

+0

如果你想维护序列1,2,1,2,只需在if(count == 2)中设置_clicks = 0,并将_clicks设置为类变量,在这里你也可以用一个变量来管理它 – Pavan

回答

0

为什么不尝试使用boolean来代替?

boolean b = false; 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if(b) { 
     // Do one thing. 
    } 
    else { 
     // Do another. 
    } 
    // Invert the state of the boolean. (This will enter the other case next time.) 
    b = !b; 
} 

如果您希望使用整数,您可以尝试使用modulo运算符。通过将数字除以二,余数可用于指示数字是奇数还是偶数。然后,你可以写的顺序如下:

int x = 0; 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if(((x++) % 2) == 0) { // Is the remainder equal to 0? (Even or Odd) 
     // Do one thing. 
    } 
    else { 
     // Do another. 
    } 
} 
0

愿意这样做:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
int _clicks = 0; 
int count; 

switch (item.getItemId()) { 

    case R.id.action_sort: 
     count = ++_clicks; 
     if (count == 1){ 
      Cursor cursor2 = databaseManager.queryAllInsects(BugsContract.BugsEntry.COLUMN_FRIENDLYNAME + " COLLATE NOCASE ASC"); 
      mAdapter.swapCursor(cursor2); 
      return true; 
     } if (count == 2){ 
      _clicks = 0; 
      Cursor cursor3 = databaseManager.queryAllInsects(BugsContract.BugsEntry.COLUMN_DANGERLEVEL + " COLLATE NOCASE DESC"); 
      mAdapter.swapCursor(cursor3); 
      return true; 
     } 

    default: 
     return super.onOptionsItemSelected(item); 
} 

} 

这样,通过第二次点击,变量_Click将有一个价值= 0,然后,由第三点击,第一个动作将会显示。

相关问题