如何再次添加片段的瞬间?

时间:2013-03-22 07:24:50

标签: android android-fragments slidingmenu

我的片段有问题。我需要多次显示一个片段,而不是创建它的新瞬间。我有一个用来改变活动内容的方法。

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" />

问题是:我创建第一个片段的瞬间并将其传递给setContentFragment(...)(仍然保持这一点)。然后使用其他Fragment调用setContentFragment。现在,我将第一个Fragment的瞬间传递给这个方法,它显示了银行屏幕。请帮帮我:(

3 个答案:

答案 0 :(得分:0)

试试这个..

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

    if (getActivity() instanceof MainActivity) {
        DashboardActivity dashboard = (MainActivity) getActivity();
        dashboard.switchFragment(fragment, "Main List");
    }
}

答案 1 :(得分: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

答案 2 :(得分:0)

交换片段时,您需要分离/重新连接而不是替换它们。这留在记忆中。此外,您不需要再次setContentView,只需保留现有的FrameLayout(您也可以将android.R.id.content用于主要活动内容视图,而不是创建FrameLayout)

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;
  }

}