用另一个片段替换一个片段

时间:2015-05-09 13:11:29

标签: android android-fragments fragmentmanager

我在这里发布了类似的问题,但一直无法弄清楚我做错了什么:

所以我有一个listFragment和一个detailsFragment。当按下listFragment中的按钮时,我希望它显示detailsFragment。

这是我的布局xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >

<FrameLayout
    android:id="@+id/listContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

<FrameLayout
    android:id="@+id/detailsContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:visibility="gone"/>

这是我的FragmentTransaction代码:

 public void onRssItemSelected(String link) {
    Boolean dual_pane = getResources().getBoolean(R.bool.dual_pane);
    if (dual_pane==true) {
        DetailFragment fragment = (DetailFragment) getFragmentManager().findFragmentById(R.id.detailFragment);
        fragment.setText(link);
    } else {
        DetailFragment fragment = new DetailFragment();

        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.listContainer, fragment);
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();

        fragment.setText(link);
    }
}

横向版本工作正常,但肖像不断崩溃。正如我所说,我已经看了很多类似的问题,但不知道我做错了什么。 我也尝试使用replace(R.id.detailsContainer,fragment)无济于事。

非常感谢!

2 个答案:

答案 0 :(得分:0)

看起来这一行导致了问题:

  

fragment.setText(联系);

因为您的片段尚未完成创建/绘制。

尝试从else语句中删除提及的行并将其添加到您的代码中:

... 
} else {
    DetailFragment fragment = new DetailFragment();
    Bundle bundle = new Bundle();
    bundle.putString("LINK", link);
    fragment.setArguments(bundle);
...

然后在你的片段中onCreateView() 拨打:

 if (getArguments() != null) {
    setText(getArguments().getString("LINK"));
 }

答案 1 :(得分:0)

Bundle bundle = new Bundle();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
bundle.putString("key", link);
fragmentTransaction.replace(R.id.listContainer, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();