eclipse から Android Studio に移行したばかりで、発生したいくつかの問題を修正しています。その 1 つは、ActionBar が提供するタブ ナビゲーションを削除し、AD サポート ライブラリが提供する Tablayout に切り替えることです。すべてうまく機能していますが、特定のフラグメントが画面に表示されているときにツールバーにメニュー項目を追加する方法がわかりません。
問題の一部は、私の MainActivity が setActionBar() を受け取る FragmentActivity を展開し、ツールバーが v7 サポート ライブラリからのものであることだと思います。もちろん、そのツールバーはそのメソッドと互換性がありません。setSupportActionBar() を試しましたが、それは FragmentActivity にあるメソッドではありません。ここでは、ActionBarActivity を展開してそのメソッドにアクセスする必要があります。どちらも非推奨です (クラスとメソッド)。
個々のフラグメントがツールバーのオプション メニューで利用可能なオプションを更新する方法を教えてください。
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/main_toolbar"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
android:layout_gravity="top"
android:background="@color/blue"
app:layout_scrollFlags="scroll|enterAlways"
app:layout_collapseMode="pin" />
<android.support.design.widget.TabLayout
android:id="@+id/main_sliding_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabIndicatorColor="@color/blue"
app:tabMode="fixed" />
</android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>
<android.support.v4.view.ViewPager
android:id="@+id/main_viewpager"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="1"
android:background="@android:color/white" />
</LinearLayout>
MainActivity.java:
public class MainActivity extends FragmentActivity implements
TabLayout.OnTabSelectedListener {
private Toolbar mToolbar;
private ViewPager mViewPager;
private TabsPagerAdapter mTabsPagerAdapter;
private TabLayout mTabLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// * unrelated code omitted ...
// * Initialize main navigation scheme
mToolbar = (Toolbar)findViewById(R.id.main_toolbar);
mToolbar.setTitleTextColor(getResources().getColor(R.color.white));
mToolbar.setLogo(R.drawable.icon_toolbar);
mViewPager = (ViewPager)findViewById(R.id.main_viewpager);
mTabsPagerAdapter = new TabsPagerAdapter(getSupportFragmentManager());
mViewPager.setAdapter(mTabsPagerAdapter);
mTabLayout = (TabLayout)findViewById(R.id.main_sliding_tabs);
mTabLayout.setupWithViewPager(mViewPager);
mTabLayout.setOnTabSelectedListener(this);
mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout));
}
}
例Fragment.java:
public class ExampleFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_athlete, container, false);
// * unrelated code omitted ...
return rootView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
// * unrelated code omitted ...
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.example_action_menu, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// * unrelated code omitted ...
return super.onOptionsItemSelected(item);
}
}