Action Button の操作
最初の Fragment では新規作成な Button は出さなくて次の Fragment では出す、みたいなナニを試してみました。
Acitivity 側では以下な記述。
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case android.R.id.home: finish(); return true; case R.id.action_settings: Toast.makeText(this, "setting button", Toast.LENGTH_SHORT).show(); return true; default: return super.onOptionsItemSelected(item); } }
で、res/manu/main.xml が以下。
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action_add" android:orderInCategory="100" android:showAsAction="never" android:icon="@android:drawable/ic_menu_add" android:title="@string/action_add"/> <item android:id="@+id/action_settings" android:orderInCategory="100" android:showAsAction="ifRoom" android:icon="@android:drawable/ic_menu_preferences" android:title="@string/action_settings"/> </menu>
いらないや、って思って add な item 消してしまったのですが、id が必要というオチ。なので showAsAction を never にしていたり。
これで_設定_なボタンは両方の Fragment で使える状態になっています。
次は_一つめ_の Fragment における OptionsMenu 関連の記述。って記述ないですね。二つ目の Fragment な記述が以下になります。
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { menu.add(Menu.NONE, R.id.action_add, Menu.NONE, "New Connection") .setIcon(android.R.drawable.ic_menu_add) .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case R.id.action_add: Toast.makeText(getActivity(), "add button from VMListFragment", Toast.LENGTH_SHORT).show(); return true; default: return super.onOptionsItemSelected(item); } }
選択した場合、Toast しか出してませんが、まだ mockup な段階ってことでご容赦頂ければ幸いです。
その後
ボタンを一つ増やす、ということで res/menu/main.xml を以下にして
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action_settings" android:orderInCategory="100" android:showAsAction="ifRoom" android:icon="@android:drawable/ic_menu_preferences" android:title="@string/action_settings"/> </menu>
_二つ目_の Fragment のメニュな記述を以下に修正してます。
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { menu.add(Menu.NONE, ADD_ID, Menu.NONE, "New Connection") .setIcon(android.R.drawable.ic_menu_add) .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); menu.add(Menu.NONE, RELOAD_ID, Menu.NONE, "Reload") .setIcon(android.R.drawable.ic_menu_rotate) .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case ADD_ID: Toast.makeText(getActivity(), "add button from VMListFragment", Toast.LENGTH_SHORT).show(); return true; case RELOAD_ID: Toast.makeText(getActivity(), "reload button from VMListFragment", Toast.LENGTH_SHORT).show(); return true; default: return super.onOptionsItemSelected(item); } }
ID は先頭で無理気味に定義。
private final int RELOAD_ID = 0xdeadbeef; private final int ADD_ID = 0xdeadbeef + 1;
最近習ったでっどびーふ。あまり意味はなかったり (ぇ