私は、いくつかの断片を含むことができる活性を有する。各フラグメントは、ActionBarに独自のメニュー項目を持つことができます。これまでのところうまく動作し、各アイテムはクリック可能で、目的のアクションを実行します。アクティビティのOnOptionsItemSelectedは、フラグメント内のonOptionsItemSelectedより前に呼び出されます。他の方法は可能ですか?
私の問題は次のとおりです。
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
clearBackStack();
setHomeFragment();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
私は私がキャッチする必要がないように、すべての断片がこれを呼び出す必要があることを望んでいたので、私は活動でそれを宣言した:MainActivityで、私はアクションバーのHomeIconへの呼び出しをインターセプトするために、次の行を宣言しましたそれぞれの断片には、android.R.id.homeのケースがあります。
一つのフラグメントで、私はsetDisplayHomeAsUpEnabled(true)を使用しているので、ActionBarアイコンの左に小さな矢印が表示されます。 HomeIconをこのフラグメントでクリックするとHomeFragmentを設定したくないので、最後に表示されたFragmentを設定したいと思います。
@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case android.R.id.home:
setLastFragment();
return true;
...
しかし、これは私はそれが動作するように望んでいたように動作しません:フラグメントのメソッド - だから私はonOptionsItemSelectedを持っています。アクティビティのonOptionsItemSelectedが最初に呼び出され、MenuItemがキャッチされ、HomeFragmentにリダイレクトされます。他のフラグメントで宣言された他のMenuItemで、私は同じ動作を確認することができます。アクティビティが最初に呼び出され、MenuItem(デフォルトのケース)がキャッチされず、super.onOptionsItemSelected(item)にリダイレクトされます。
これは、Androidがメニュークリックを処理する方法のようです。最初のアクティビティ、次にフラグメント。これを変更する方法はありますか?私は、すべてのフラグメントにandroid.R.id.home-caseを入れてそこで処理したくありません。これを行うにはより良い方法がありますか?
これはMrHillが求めていたものではありません!私は同じ問題に直面している。通常、アクティビティは "ホームUP"ボタンを処理します。時には、特定のフラグメントが現在アクティブである間に "Home UP"ボタンが押されたときに特別なアクションを実行することがあります。アクティビティonOptionsItemSelectedでfalseを返すと、アクティビティがケースを処理できなくなります。 – John