2015-05-09 134 views
0

我已经看到了类似的问题,这张贴在这里,但一直无法找出我一直在做错误的:更换一个片段与另一个

所以我有一个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); 
    } 
} 

景观版本工作正常,但画像总是崩溃。正如我所说我已经看了很多类似的问题,但没有看到我做错了什么。 我也尝试使用替换(R.id.detailsContainer,片段)无济于事。

非常感谢!

+3

您需要发布的堆栈跟踪的崩溃。 – inmyth

回答

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")); 
} 
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();