2

私のアプリでは、SherlockFragmentActivityを拡張するクラスを持っています。そのアクティビティ内で、 ActionbarSherlockPagerSlidingTabStripの助けを借りて、タブのふりをするSherlockFragmentを拡張する 4 つのクラスをロードしています。

SherlockFragmentを拡張するクラスにはsetHasOptionsMenu(true);があります。onCreate()メソッド内。それがあっても、アプリケーションを実行すると、onCreateOptionsMenu()メソッドは呼び出されません。

SO でこれらの同様の質問 ( Q1Q2 ) を読みましたが、何の助けも得られませんでした。

その理由は何ですか?


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setHasOptionsMenu(true);

}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    menu.clear();
    inflater.inflate(R.menu.record, menu);
    super.onCreateOptionsMenu(menu, inflater);
    Log.i(TAG, "* onCreateOptionsMenu");
}

アップデート:

その理由は、別の SherlockFragment 内で SherlockFragment を使用しているためだと思います。PageSlidingTabStripFragment.javaの手段には、MyPagerAdapterクラス内に次のメソッドがあります。

@Override
public SherlockFragment getItem(int position) {
    return SuperAwesomeCardFragment.newInstance(position);
}

私がやっていることは、以下のようにそこから他の SherlockFragments を呼び出していることです。

@Override
public SherlockFragment getItem(int position) {
    Log.i(TAG, "* getItem");

    switch (position) {
        case 0:
            return new InnerSherlockFragmentOne();
        case 1:
            return new InnerSherlockFragmentTwo();
        case 2:
            return new InnerSherlockFragmentThree();
        case 3:
            return new InnerSherlockFragmentFour();
        default:
            return null;
    }
}

呼び出していないのは、これらの InnerSherLockFragments 内のonCreateOptionsMenu(Menu menu, MenuInflater inflater)です。

4

3 に答える 3

4

インポートは次のようになります。

import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;

Android OSのこれらではありません!

また、次のようなメソッドを呼び出してみてくださいsuper:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    menu.clear();
    inflater.inflate(R.menu.record, menu);

    Log.i(TAG, "* onCreateOptionsMenu");
}
于 2013-11-19T10:43:04.637 に答える