私はフラグメントの開始時に変化するオプションメニューを持つ簡単なアプリケーションを持っています。 問題は、最初にonCreateOptionsMenu()を除くフラグメントがonCreate()内とonResume()の後で2回呼び出されることです。 onCreate()では、setHasOptionsMenu(true)を使用して手動で呼び出しますが、onResume()の後は発生しません。 これは、最初のフラグメントが開始された後にのみ発生します。ここでonCreateOptionsMenu()はフラグメント内で2回呼び出されました
は、ベース断片コードです:
class BaseFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle clicks
return true;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// Create a menu
super.onCreateOptionsMenu(menu, inflater);
}
}
と活動における変更の断片コード:
public void startFragment(BaseFragment fragment) {
getSupportFragmentManager()
.beginTransaction()
.replace(android.R.id.content, fragment)
.commit();
}
サンプルはActionBarSherlock、唯一SupportLibraryなどの任意の外部ライブラリを使用していません。 問題はFragmentTransaction replace()メソッドにあります。なぜなら、最初のフラグメントが開始されたときに問題なく動作するからです。しかし、私は、どこで問題を解決し始めるのか分かりません。私は正確にビューでフラグメントを置き換える必要があります。
どの携帯電話を使用していますか?電話機に専用のメニューボタンがある場合、onCreateOptionsMenuは、ユーザがそれをクリックしたときにのみ呼び出されます。 add-onには、setHasOptionsMenu(true)がonCreateOptionsMenuを呼び出す必要はありません。これは、フレームワークに、メニューにポピュレートするときにフラグメントが参加したいと通知するだけです。 – prijupaul
OPでも同じ問題があるときに質問を追加/編集することはできません。私はMenuについての基本的なものを知っています、問題は説明されたOPのような奇妙です。 編集:私はネストされたフラグメントを使用しています – Zyoo
@prijupaulそれは実際にハニカム前のバージョンのためだけです。 Honeycombでは、setHasOptionsMenu()を呼び出した直後にonCreateOptionsMenuが呼び出されます。 – bvitaliyg