Замена одного фрагмента другим
Я видел аналогичную проблему с этой, опубликованной здесь, но не смог понять, что я делал неправильно:
Итак, у меня есть список фрагментов и подробности фрагмента. Когда кнопка в списке будет нажата, я хочу, чтобы она отображала фрагмент данных.
Это мой макет 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, фрагмент) безрезультатно.
Большое спасибо!
2 ответа
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();
Похоже, эта строка вызывает проблемы:
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"));
}