2013-05-27 14 views
12

新しいナビゲーションドロワーパターンを使用して、1つのフラグメントを別のフラグメントに置き換えようとしています。それは動作しているようですが、私が引き出しから別のオプションを選択すると、新しいフラグメントがロードされますが、両方のフラグメントが表示されます。私は静的フラグメントレイアウトを使用していないので、どこに問題があるのか​​わかりません。フラグメントがまだ背景に表示されています

フラグメントは、メソッドによってロードされ、私の活動にはAdapterView.OnItemClickListenerが実装されています。

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    Fragment fragmentToShow = null; 
    // Load desired fragment 
    switch (position) { 
     case 0: // Authors 
      if (fragmentAuthors == null) fragmentAuthors = new FragmentAuthors(); 
      fragmentToShow = fragmentAuthors; 
      break; 
     case 1: // Books 
      if (fragmentBooks == null) fragmentBooks = new FragmentBooks(); 
      fragmentToShow = fragmentBooks; 
      break; 
    } 
    FragmentTransaction ft = fragmentManager.beginTransaction(); 
    ft.replace(R.id.ActivityMain_Drawer_FrameMain, fragmentToShow); 
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
    ft.commit(); 
    mDrawerLayout.closeDrawers(); 
} 

レイアウト

<!-- The main content view --> 
<FrameLayout 
    android:id="@+id/ActivityMain_Drawer_FrameMain" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/background_light" /> 

<!-- The navigation drawer --> 
<FrameLayout 
    android:id="@+id/ActivityMain_Drawer_FrameMenu" 
    android:layout_width="240dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:background="@android:color/background_light"> 
    <ListView 
     android:id="@+id/ActivityMain_Drawer_FrameMenu_List" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:choiceMode="singleChoice" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="0dp" /> 
</FrameLayout> 

スクリーンショット

https://dl.dropboxusercontent.com/u/1763308/Screenshots/device-2013-05-27-113128.png https://dl.dropboxusercontent.com/u/1763308/Screenshots/device-2013-05-27-113139.png

答えて

11

私はいくつかの断片と同じ問題を持っています。例えば、それをすべてのフラグメントレイアウトのI簡単なセットの背景色を解決するために:背景=「@アンドロイド:カラー/ background_light」 アンドロイド変更する

android:background="?android:attr/colorBackground" 
+12

私は同じ問題を抱えていますが、確かにこの回答は問題を隠しているだけであり、参照を保持して背景色で隠しているよりもむしろ停止する必要があります –

+5

私はこれがオーバードローを追加して、UIアニメーションの流動性を低下させます。これはあなたの問題を解決するものではありませんが、文字通りそれを隠します。 – MinceMan

+2

これは良い解決策だとは思わない。 – rgv

0

てみてくださいいくつかの他のcolor.Mayの色は、この解くことあなたの問題。

+0

私は、'android:background = "#F00" 'のような静的な色に変更するか、システムの色の参照を使用するが、結果は同じであることをテストしました。両方のフラグメントが表示され、入力に応答しません。 – Zetch

+0

このページを参照http://developer.android.com/training/implementing-navigation/nav-drawer.htmlサンプルプロジェクトをダウンロードし、既存のプロジェクトと比較してみてください。 ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)を削除してみてください。この行を実行します。 –

+0

私はすべてのフレームとすべてのフラグメントレイアウトで背景色を設定しようとしましたが、うまくいくようです。しかし、今私は別の問題があります。一度ロードされたフラグメントロードはすべてOKですが、再度ロードするとListViewは空です。すべてのListViewには、各フラグメントの 'onActivityCreated'が呼び出されるときにロードされるArrayAdapterがあります。 – Zetch

1

私はここで多くの提案された答えを試しました。時間を費やした結果、フラグメントのレイアウトに背景色を指定しなくても問題は解決しました。

@Override 
public void onBackPressed() { 
    List<Fragment> fragments = getSupportFragmentManager().getFragments(); 
    if (fragments.size() > 1) { 

     final Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.my_framelayout); 
     if (currentFragment != null) { 
      getSupportFragmentManager().beginTransaction().remove(currentFragment).commit(); 
      getSupportFragmentManager().popBackStack(); 
     } 
    } else { 
     super.onBackPressed(); 
    } 
} 

希望:

私のソリューションはとても戻るボタンが押されるたびに、私は現在示すフラグメントを削除し、以前のものを戻すことが、フラグメントの容器を保持する活動にonBackPressedメソッドをオーバーライドすることですこれは役に立ちます。

関連する問題