0

フラグメントに問題があります。フラグメントを何度も表示する必要があり、その新しいインスタントを作成しません。アクティビティの内容を変更するために使用するメソッドがあります。

protected void setContentFragment(Fragment contentFragment) {
    this.contentFragment = contentFragment;
    setContentView(R.layout.content_frame);
    getSupportFragmentManager().beginTransaction()
            .replace(R.id.content_frame, contentFragment).commit();
    getSlidingMenu().showContent();
}

content_frame は単純なレイアウトです。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />

問題は次のとおりです。最初の Fragment のインスタントを作成し、それを setContentFragment(...) に渡します (まだこのインスタンスを保持します)。次に、他の Fragment で setContentFragment を呼び出します。そして、最初の Fragment のインスタントをこのメソッドに渡すと、銀行画面が表示されます。私を助けてください :(

4

3 に答える 3

0

これを試して..

    private void switchFragment(Fragment fragment) {
    if (getActivity() == null)
        return;

    if (getActivity() instanceof MainActivity) {
        DashboardActivity dashboard = (MainActivity) getActivity();
        dashboard.switchFragment(fragment, "Main List");
    }
}
于 2013-03-22T07:34:52.047 に答える
0

これを行う

protected void setContentFragment(Fragment contentFragment) {
    this.contentFragment = contentFragment;
    Random random = new Random(100);
    String rString = "myRandomString"+random.nextInt(); // Create a random string here everytime you call setContentFragment
    setContentView(R.layout.content_frame);
    getSupportFragmentManager().beginTransaction()
            .replace(R.id.content_frame, contentFragment, rString).commit();
    getSlidingMenu().showContent();
}

これにより、必要に応じてフラグメントが置き換えられます

参照:http ://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html#replace%28int,%20android.support.v4.app.Fragment,%20java.lang.String%29

于 2013-03-22T09:51:08.130 に答える
0

フラグメントを交換するときは、それらを置き換えるのではなく、デタッチ/再アタッチする必要があります。これで記憶に残ります。また、ContentView を再度設定する必要はありません。既存の FrameLayout のままにしてください (FrameLayout を作成する代わりに、メイン アクティビティ コンテンツ ビューに android.R.id.content を使用することもできます)。

Fragment content1, content2;
Fragment current=content1;

public void onCreate() {
  if(savedInstanceState==null)
    getSupportFragmentManager().beginTransaction()
      .add(android.R.id.content, content1)
      .commit();
}

public void swap() {
  if(current==content1) {
    getSupportFragmentManager().beginTransaction()
      .detach(content1)
      .attach(android.R.id.content, content2)
      .commit();
    current=content2;
  } else {
    getSupportFragmentManager().beginTransaction()
      .detach(content2)
      .attach(android.R.id.content, content1)
      .commit();
    current=content1;
  }

}

于 2013-03-22T16:00:07.343 に答える