2016-05-29 8 views
0

ズームインボタンを追加したマップバーに、アクションバーが表示されています。選択すると、ズームアウトボタンに置​​き換えます。Androidのアクションバーのアイテムの属性を変更します。

ズームインを選択すると、明らかにメニュー項目としてonOptionsItemSelectedが表示されるため、次のような属性を設定するのは簡単です。viewZoomIn.setVisibility(viewZoomIn.GONE);私の問題は、私がviewZoomOut.setVisibility(viewZoomOut.VISIBLE);のように設定するために、アクションバーのズームアウトボタンへの参照を取得する方法です。

私はインスタンス変数としてズームインとズームアウトのビューを保存すると、私はアクションバーを膨らませるときにそれらをキャプチャし、このようにすることができるかもしれ考えた:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main_menu, menu); 
    viewZoomIn = findViewById(R.id.zoom_in); 
    viewZoomOut = findViewById(R.id.zoom_out); 
    return super.onCreateOptionsMenu(menu); 

これは動作しません。

私のズームイン/ズームアウトボタンをトグルするためのより良い方法についてのアドバイス、またはボタンの把握に関する助けがあれば幸いです。

これはおそらく表示されていますが、私はJavaにはかなり新しいので、簡単な方法で援助が行われた方がよいでしょう。

ありがとうございます。

答えて

0

MenuItemの状態を切り替えるには、onCreateOptionsMenu(Menu)には表示されない視界ロジックをonPrepareOptionsMenu(Menu)に適用する必要があります。

ところで
private boolean currentlyZoomedIn; 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main_menu, menu); 
    return super.onCreateOptionsMenu(menu); 
} 

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    // called the first time and after each "invalidateOptionsMenu()" 
    // if tha Activity is in the "zoomedIn" state, the zoomOut button will be visible 
    menu.findItem(R.id.zoom_in).setVisible(!currentlyZoomedIn); 
    menu.findItem(R.id.zoom_out).setVisible(currentlyZoomedIn); 
    return super.onPrepareOptionsMenu(menu); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()){ 
     case R.id.zoom_in: 
      // do your logic when zoom_in is clicked 
      currentlyZoomedIn = true; 
      break; 
     case R.id.zoom_out: 
      // do your logic when zoom_out is clicked 
      currentlyZoomedIn = false; 
      break; 
    } 
    // force the redraw of the menu 
    invalidateOptionsMenu(); 
    return super.onOptionsItemSelected(item); 
} 

、私はあなたが唯一のボタンを使用して、インスタンス変数と、このような方法でinvalidateOptionsMenu()への呼び出しを避けるためにのみonOptionsItemSelected(MenuItem)であなたのロジックを移動することをお勧め:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // zoom_out_in_id is the id for the common button 
    if (item.getItemId() == R.id.zoom_out_in_id) { 
     // get the curren title 
     final CharSequence title = item.getTitle(); 
     // if the current title is the one of zoom_in button, you have to change its infos to zoom_out ones 
     if (title.equals("zoom_in_title")) { 
      // do your logic when zoom_in is clicked 
      item.setIcon(R.drawable.zoom_out_icon); 
      item.setTitle("zoom_out_title"); 
     } else if (title.equals("zoom_out_title")) { 
      // do your logic when zoom_out is clicked 
      item.setIcon(R.drawable.zoom_in_icon); 
      item.setTitle("zoom_in_title"); 
     } 
    } 
    return super.onOptionsItemSelected(item); 
} 
+1

何Aファンタスティックな答え。すべてのコードも書かれています。理にかなっています。ありがとうございました。 –

+0

@PaulC答えがあなたを助けた場合はそれを受け入れ、他の場合は疑問を言う –

+0

その2番目の選択肢ははるかに優雅です。再度、感謝します。 –

関連する問題