У меня есть следующие файлы 2 макета:findFragmentById возвращает фрагмент, который не существует
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<fragment android:id="@+id/list_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
class="MyListFragment"/>
</LinearLayout>
(w900dp)
<fragment android:id="@+id/list_fragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight=".3"
class="MyListFragment"/>
<fragment android:id="@+id/content_fragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight=".7"
class="MyContentFragment"/>
Тогда в моей деятельности I имеют:
public class ReportActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.report);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// Get the content fragment
MyContentFragment contentFragment = (MyContentFragment) getSupportFragmentManager().findFragmentById(R.id.content_fragment);
if (contentFragment != null) {
// sometimes I get a handle to this fragment when I should not
contentFragment.updateContent(//some content);
}
}
Моя проблема в этом. Когда я запускаю приложение в ландшафтном режиме, ширина достаточно широка, чтобы отображать оба фрагмента. Когда я поворачиваюсь к портрету, он уже не является достаточно широким, загружается файл макета без фрагмента содержимого. Однако, когда я вызываю диспетчер фрагментов, чтобы получить этот фрагмент, он находит его. Затем, когда я вызываю содержимое обновления, которое терпит неудачу, поскольку компоненты пользовательского интерфейса внутри этого фрагмента больше не существуют.
Почему getFragmentById возвращает фрагмент, который существует, но больше не существует после поворота устройства?
Спасибо. Однако я не программировал создание фрагментов, android делает это для меня, как они есть в моем файле макета. И.Е. причина, по которой я не размещал больше кода операции, заключается в том, что их больше нет. Когда вы используете тег фрагмента в файле макета xml, файл android создает/уничтожает фрагмент. – lostintranslation
Возможно, вам захочется попробовать вручную обработать его, поскольку структура, похоже, не очень хорошая работа. – athingunique