我在这里发布了类似的问题,但一直无法弄清楚我做错了什么:
所以我有一个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)无济于事。
非常感谢!
答案 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();