23

http://developer.android.com/training/implementing-navigation/nav-drawer.htmlのガイドラインを使用して、DrawerLayout を持つアクティビティを取得しました。

drawerItem をクリックすると、現在のビューが新しいフラグメントに置き換えられます。

Fragment fragment;
Bundle args = new Bundle();    
fragment = new NewsListFragment();
args.putInt("category", position);

// Insert the fragment by replacing any existing fragment
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
                   .replace(R.id.content_frame, fragment)
                   .commit();        
mDrawerList.setItemChecked(position, true);

現在、古いフラグメントが置き換えられず、新しいフラグメントが古いフラグメントの上に配置される場合があります。

http://img15.imageshack.us/img15/3179/1kqj.png

これはなぜですか、この問題を解決するにはどうすればよいですか?

関連する XML:

<!-- The main content view -->
<LinearLayout 
    android:id="@+id/rlMain"
    android:layout_width="fill_parent"
    android:orientation="vertical"
    android:layout_height="fill_parent">

    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" 
        android:layout_weight="1">
    </FrameLayout>

これは時々しか発生せず、これを再現するフローはまだ見つかっていません。アプリは回転をサポートしていないため、回転は発生しません。

4

7 に答える 7

2

すべてのレイアウトに追加

android:background="#FFFFFF"

デフォルトのレイアウトの背景は透明なので、背景色と新しい要素のフラグメントを配置するだけで、古いフラグメントの上には表示されません

于 2015-01-28T19:03:14.263 に答える
0

試してみましょう

fragmentManager.beginTransaction().executePendingTransactions();

commit() メソッドを呼び出した後

于 2013-08-19T08:58:29.470 に答える
0

私はこの同じ問題に遭遇し、すでに受け入れられている回答があることがわかりましたが、これらの回答は100%正しくなく、問題を解決しませんでした. @Niels による提案された回答はビューを削除しますが、フラグメントはまだ追加されています。これは私が使用しているものです:

/**
 * Call this to remove all the other added fragments and keep only the current one.
 *
 * @param activity the activity to which the fragment has been attached.
 * @param fragment the fragment we want to keep.
 */
public static void removeOtherAddedFragments(@NonNull AppCompatActivity activity, @NonNull Fragment fragment) {
    FragmentManager fragmentManager = activity.getSupportFragmentManager();
    for (Fragment frag : fragmentManager.getFragments()) {
        if (frag != null && !frag.equals(fragment) && frag.isAdded()) {
            fragmentManager.beginTransaction().remove(frag).commit();
        }
    }
}

フラグメントに戻るときにも呼び出されるように、onResume でこれを呼び出しています。

于 2016-03-11T10:27:39.603 に答える