2017-07-12 7 views
0

メニューアイコンは、最初のクリックで2つの異なるアクションに反応するようにしようとしています。同じメニューの2回目のクリックで最初のアクションをトリガーする必要があります。ただアクションメニューは、2つの異なるアクションの間で切り替えることができます。

間方法

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

} 

を切り替えるように、私は実際にこれをしなかったが、それは第二のクリックを得れば、それは再びクリックできないすなわちバック最初の関数にトグルしない最初のアクションを呼び出します。いずれかがouを助けることができます。私はほとんどのアクションバーのメニューに固執する

+0

シーケンスを維持したい場合は1,2,1,2 if(count == 2)で_clicks = 0を設定し、_clicksをクラス変数として設定します。ここでも1つの変数で管理することができます – 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演算子を試みることができます。この数を2で除算することによって、その数が奇数か偶数かを示すために残余を使用することができる。次のようにその後、シーケンスを書くことができます:

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を持つことになり、第三でをクリックすると、最初のアクションが表示されます。

関連する問題