2017-07-12 63 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,然後,由第三點擊,第一個動作將會顯示。

相關問題