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。现在,我将第一个片段的瞬间传递给这个方法,它显示银行屏幕。请帮我 :(

4

3 回答 3

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

}

于 2013-03-22T16:00:07.343 回答
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

尝试这个..

    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 回答