私は、developer.android.com の NavigationDrawer サンプル コードを調べていて、それを私のアプリの 1 つのナビゲーションとして実装しようとしました。しかし、サンプル コードは同じフラグメントを再利用し、イメージ ビューを切り替えるだけなので、メイン ウィンドウでフラグメントを切り替えるときに問題が発生しました。サンプルのコードは次のとおりです。
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
}
}
private void selectItem(int position) {
// update the main content by replacing fragments
Fragment fragment = new PlanetFragment();
Bundle args = new Bundle();
args.putInt(PlanetFragment.ARG_PLANET_NUMBER, position);
fragment.setArguments(args);
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
setTitle(mPlanetTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
}
ここで、PlanetFragment はイメージビューのみで機能を持たない一般的なフラグメントであり、これは私のアプリには当てはまりません。代わりに、selectItem メソッドの最初のブロックをケース/スイッチに置き換えてみました。
public void selectItem(int position){
Fragment fragment;
switch(position){
case 1: fragment = new Fragmentscreentest(); break;
case 2: fragment = new Fragmentstatusbar(); break;
case 3: fragment = new Fragmentfullscreen(); break;
default: fragment = new Fragmentscreentest(); break;
}
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
setTitle(mPlanetTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
}
そして、PlanetFragment と同じ空のコンストラクターを Fragments に追加しました。
public Fragmentstatus() {
// Empty constructor required for fragment subclasses
}
アプリを開くたびに、アクションバーにアプリのアイコンとタイトルのみが表示され、アクションバーにコンテンツもアクションもナビゲーションドロワーも何も表示されず、約1秒後にクラッシュします。元のコードでは機能してすべてが表示されますが、それは 1 つのフラグメントに対してのみ機能します。
NavigationDrawer で Fragments を実際に切り替えるにはどうすればよいですか?