Замена одного фрагмента другим

Я видел аналогичную проблему с этой, опубликованной здесь, но не смог понять, что я делал неправильно:

Итак, у меня есть список фрагментов и подробности фрагмента. Когда кнопка в списке будет нажата, я хочу, чтобы она отображала фрагмент данных.

Это мой макет 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"));
 }
Другие вопросы по тегам