Фрагмент Android для ID не найден?


287

У меня есть фрагмент, который я пытаюсь добавить в представление.

FragmentManager fragMgr=getSupportFragmentManager();
feed_parser_activity content = (feed_parser_activity)fragMgr
                                    .findFragmentById(R.id.feedContentContainer);
FragmentTransaction xaction=fragMgr.beginTransaction();

if (content == null || content.isRemoving()) {
    content=new feed_parser_activity(item.getLink().toString());
    xaction
        .add(R.id.feedContentContainer, content)
        .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
        .addToBackStack(null)
        .commit();
    Log.e("Abstract", "DONE");
}

Когда этот код выполняется, я получаю следующую ошибку в отладке ..

java.lang.IllegalArgumentException: No view found for id 0x7f080011 
   for fragment feed_parser_activity{41882f50 #2 id=0x7f080011}

feed_parser_activityявляется фрагментом, который установлен на макет фрагмента в XML.
Я использую FragmentActivity для размещения макета фрагмента, содержащего feed_parser_layout.
Я правильно кодирую это выше?


3
Можете ли вы включить XML?
Джисмит

1
Та же ошибка может возникнуть при выполнении транзакции фрагмента перед вызовом setContentView в Activity
Павел

Ответы:


374

У меня была эта проблема тоже, пока я не понял , что указан неверный макет в setContentView()о onCreate()способе FragmentActivity.

Идентификатор, передаваемый в FragmentTransaction.add(), в вашем случае R.id.feedContentContainer, должен быть дочерним по отношению к макету, указанному в setContentView().

Вы не показали нам свой onCreate()метод, так что, возможно, это та же проблема.


5
Что вы подразумеваете под дочерним элементом макета, указанного в setContentView? Как сделать это ребенком?
NinjaCoder

11
Представление является дочерним по отношению к другому представлению, если оно объявлено внутри родительского представления в XML. то есть. TextViewвнутри RelativeLayoutребенок из RelativeLayout.
Howettl

@howettl: я знаю, что это старый пост. Но я не могу решить эту проблему с вашим ответом. Вот ТАК вопрос: stackoverflow.com/questions/25844394/… - Можете ли вы помочь мне с этим, пожалуйста? Спасибо!
TheDevMan

@howettl, не могли бы вы помочь мне с подобной проблемой. stackoverflow.com/questions/26966623/…
Вамси Чалла

3
Случилось со мной Недостаток CTRL + C CTRL + V.
0

298

Эта ошибка также возникает при наличии вложенных фрагментов и добавлении их с помощью getSupportFragmentManager () вместо getChildFragmentManager ().


10
Мой был наоборот. Пытался добавить в основной контейнер фрагмент с вызовом getChildFragmentManager (). Указав это, я решил это. Спасибо +1
speedynomads

@Malachiasz: Не могли бы вы взглянуть на этот вопрос о ViewPager? Спасибо stackoverflow.com/questions/27937250/…
Hoa Vu

Это была именно моя проблема, спасибо. Как ни странно, это происходило только в альбомной ориентации при вызове .show (). Использование его для замены основного фрагмента работало нормально.
Cohenadair

1
Это была именно моя проблема, большое спасибо! Это происходило только на некоторых медленных устройствах, поэтому было трудно понять, что именно происходит.
YawaraNes

1
После того, как я пришел к этому вопросу несколько раз, я почувствовал, что ни у кого не было моей проблемы, просто пришлось немного прокрутить вниз. Было бы неплохо, если бы они могли получить более точный код ошибки, чтобы сказать, что это может иметь место.
KodyVanRy

67

Решение было использовать getChildFragmentManager()

вместо того getFragmentManager()

при звонке с фрагмента. Если вы вызываете метод из действия, используйте getFragmentManager().

Это решит проблему.


4
Вместо этого используйте @ surfer190 getSupportFragmentManager().
Амир Хоссейн Гасеми

Изменено на getChildFragmentManager () и это работает !!
Shyam

В моем случае я использовал навигацию по фрагментам с использованием viewpager в нижнем фрагменте листа. Ваше решение сработало блестяще! Тонны Thanx братан.
Дебашиш Гош

1
была та же проблема, и это решило ее для меня! getChildFragmentManager () вместо getActivity (). getFragmentManager (), что имеет смысл, как только я подумаю об этом :) TY!
Симон

Я вызываю метод из действия, но getFragmentManager()уже устарел!
Алиреза Нурали

29

У меня была эта проблема (при создании моего пользовательского интерфейса в коде), и она была вызвана тем, что у меня ViewPager(который показывал Fragments) не было набора идентификаторов, поэтому я просто использовал, pager.setID(id)и тогда это сработало.

Эта страница помогла мне понять это.


1
У меня была такая же проблема при использовании viewPager. Та же ошибка была исправлена ​​с помощью viewPager.setCurrentItem (n) перед выполнением транзакции. Может быть, это будет кому-то полезно.
Кирк Хамметт

В моем случае было в аналогичном направлении, но проблема заключалась в том, что я использовал отрицательное значение в .setID. Использование положительного целого числа решило проблему.
Игнасио Агопян

29

Другой сценарий, который я встретил. Если вы используете вложенные фрагменты, скажем ViewPager во фрагменте с его страницами, также фрагментами.

Когда вы делаете транзакцию фрагмента во внутреннем фрагменте (странице ViewPager), вам понадобится

FragmentManager fragmentManager = getActivity().getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

getActivity () является ключом здесь. ...


да ... для меня все остальные реализации были в порядке, кроме этого. Я непосредственно пытался получить доступ к коду, как этот: FragmentTransactionaction = getSupportFragmentManager (). BeginTransaction (); Затем я получил фрагмент-менеджер, использующий getActivity () отдельно, как вы упомянули. Это работает довольно
Ананд Криш

18

В моем случае я пытался показать DialogFragment, содержащий пейджер, и это исключение было вызвано, когда FragmentPagerAdapter попытался добавить фрагменты в пейджер. Основываясь на ответе howettl, я предполагаю, что это произошло из-за того, что родительский элемент Pager не был установлен в setContentView () в моем FragmentActivity

Единственное изменение, которое я сделал, чтобы решить эту проблему, - это создать FragmentPagerAdapter, передавая FragmentMager, полученный путем вызова getChildFragmentManager (), а не тот, который был получен путем вызова getFragmentManager (), как я обычно это делаю.

    public class PagerDialog extends DialogFragment{

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.pager_dialog, container, false);

        MyPagerAdapter pagerAdapter = new MyPagerAdapter(getChildFragmentManager());
        ViewPager pager = (ViewPager) rootView.findViewById(R.id.pager);
        pager.setAdapter(pagerAdapter);

        return rootView;
    }
}

getChildFragmentManager () не доступен из DialogFragment
Абдалрахман Шату

14

Это исключение также может произойти, если идентификатор макета, который вы передаете, FragmentTransaction.replace(int ID, fragment)существует в других раздуваемых макетах. Убедитесь, что идентификатор макета уникален, и он должен работать.


Компилятор не сообщает, отсутствует ли идентификатор в текущем макете, если он не уникален, поэтому реальная проблема заключается не в уникальности идентификатора, а в упущении идентификатора в текущем макете.
Самуил

13

Ответ, который я прочитал в другой ветке, похожей на ту, которая работала для меня, когда у меня возникла эта проблема, касалась макета XML.

Ваш logcat говорит "Нет просмотра для id 0x7f080011".

Откройте, gen->package->R.java->idа затем найдите идентификатор 0x7f080011.

Когда у меня возникла эта проблема, этот идентификатор принадлежал FrameLayoutв моем activity_main.xmlфайле.

У FrameLayout не было идентификатора (не было оператора android:id = "blablabla").

Убедитесь, что все ваши компоненты во всех ваших макетах имеют идентификаторы, особенно компонент, указанный в logcat.


1
Ницца. В Android Studio с LinuxOS он находится здесь: / home / bob / AndroidStudioWorkspace / HelloWorld / приложение / сборка / созданная / source / r / release / android / support / v7 / appcompat.
portample

11

Я получил эту ошибку при обновлении с com.android.support:support-v4:21.0.0до com.android.support:support-v4:22.1.1.

Я должен был изменить свой макет из этого:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container_frame_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</FrameLayout> 

К этому:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/container_frame_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </FrameLayout>

</FrameLayout> 

Таким образом, макет ДОЛЖЕН иметь дочерний вид. Я предполагаю, что они применили это в новой библиотеке.


9

С вложенными фрагментами

Для меня с помощью getChildFragmentManager()вместо getActivity().getSupportFragmentManager()решенного сбоя

java.lang.IllegalArgumentException: не найдено представление для id


но внутри адаптера не может быть указано getchildFragmentManger почему
Сунил Чаудхари

8

Я знаю, что это уже было решено для одного сценария, но моя проблема была немного другой, и я подумала, что поделюсь, если кто-то еще на моем месте.

Я проводил транзакцию внутри onCreate(), но на этом этапе дерево представлений не было раздуто, поэтому вы получаете ту же ошибку. Ввод кода транзакции вonResume() сделал все работает нормально.

Так что просто убедитесь, что ваш код транзакции выполняется после того, как дерево представления было завышено!


3
Хм ... в моем случае не имело значения, был ли такой код в onCreate или onResume
Игорь Ганапольский

@IgorGanapolsky в моем случае тоже решил это с помощью обратного вызова из фрагмента onAttach. Смотрите мой ответ
Александр Малахов

Это была моя проблема точно. При вызове другого класса для обновления состояния представления выполнялась транзакция фрагмента в макете, который еще не был раздут. Вызов его в onResume () устранил проблему.
AWT

8

Я столкнулся с неприятной ошибкой при использовании Viewpager в Recycler View. Ниже ошибки я столкнулся в особой ситуации. Я начал фрагмент, который имел RecyclerView с Viewpager (используя FragmentStatePagerAdapter). Это работало хорошо до тех пор, пока я не переключился на другой фрагмент по щелчку ячейки в RecyclerView, а затем вернулся назад, используя аппаратную кнопку «Назад» телефона, и приложение упало.

И что забавно, так это то, что у меня было два ViewPager в одном RecyclerView, и оба были на расстоянии около 5 ячеек (другие не были видны на экране, они были отключены). Поэтому изначально я просто применил Решение к первому Viewpager и оставил другой как есть (Viewpager используя фрагменты).

Навигация назад работала нормально, когда был виден первый пейджер. Теперь, когда я прокрутил вниз до второго, а затем изменил фрагмент и вернулся, он потерпел крах (То же самое произошло с первым). Поэтому мне пришлось поменять оба виджета.

В любом случае, читайте ниже, чтобы найти рабочее решение. Ошибка сбоя ниже:

java.lang.IllegalArgumentException: No view found for id 0x7f0c0098 (com.kk:id/pagerDetailAndTips) for fragment ProductDetailsAndTipsFragment{189bcbce #0 id=0x7f0c0098}

Потратил часы на его отладку. Прочитайте этот полный пост темы до конца, применяя все решения, включая проверку того, что я передаю childFragmentManager.

Ничего не получалось.

Наконец, вместо использования FragmentStatePagerAdapter я расширил PagerAdapter и использовал его в Viewpager без использования фрагментов. Я считаю, что некоторые, где есть ошибка с вложенными фрагментами. Во всяком случае, у нас есть варианты. Читать ...

Ниже ссылка была очень полезна:

Просмотр без фрагментов

Ссылка может умереть, поэтому я размещаю свое внедренное решение здесь:

public class ScreenSlidePagerAdapter extends PagerAdapter {
private static final String TAG = "ScreenSlidePager";
ProductDetails productDetails;
ImageView imgProductImage;
ArrayList<Imagelist> imagelists;
Context mContext;

// Constructor
public ScreenSlidePagerAdapter(Context mContext,ProductDetails productDetails) {
    //super(fm);
    this.mContext = mContext;
    this.productDetails = productDetails;
}

// Here is where you inflate your View and instantiate each View and set their values
@Override
public Object instantiateItem(ViewGroup container, int position) {
    LayoutInflater inflater = LayoutInflater.from(mContext);
    ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.product_image_slide_cell,container,false);

    imgProductImage = (ImageView) layout.findViewById(R.id.imgSlidingProductImage);
    String url = null;
    if (imagelists != null) {
        url = imagelists.get(position).getImage();
    }

    // This is UniversalImageLoader Image downloader method to download and set Image onto Imageview
    ImageLoader.getInstance().displayImage(url, imgProductImage, Kk.options);

    // Finally add view to Viewgroup. Same as where we return our fragment in FragmentStatePagerAdapter
    container.addView(layout);
    return layout;
}

// Write as it is. I don't know much about it
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((View) object);
    /*super.destroyItem(container, position, object);*/
}

// Get the count
@Override
public int getCount() {
    int size = 0;

    if (productDetails != null) {
        imagelists =  productDetails.getImagelist();
        if (imagelists != null) {
            size = imagelists.size();
        }
    }
    Log.d(TAG,"Adapter Size = "+size);
    return size;
}

// Write as it is. I don't know much about it
@Override
public boolean isViewFromObject(View view, Object object) {

    return view == object;
}

}

Надеюсь, это было полезно!


Да, это решение сработало, но что если мне понадобится сложная конструкция с собственным жизненным циклом и переменными, а не только представлениями? Он будет использоваться с videoViews и imageViews с кнопками воспроизведения и отключения звука. Ничего полезного для моего случая?
Никита Аксёнов

Я считаю, что это причина: stackoverflow.com/a/27966053/1377819
Хоанг Нгуен Хуу

7

У меня была такая же проблема, но моя проблема происходила при смене ориентации. Ни одно из других решений не сработало. Вот и получается, что я забыл удалить setRetainInstance(true);из своих фрагментов, когда делал макет из двух или одной панели в зависимости от размера экрана.


установите false в свой setRetainInstance (true), если вы находитесь во вложенных фрагментах, это исправит ошибку.
ralphgabb

5

Моя ошибка была на FragamentTransaction .

Я делал это t.replace(R.layout.mylayout);вместоt.replace(R.id.mylayout);

Разница в том, что один является макетом, а другой является ссылкой на layout(id)


4

На всякий случай, если кто-то совершил ту же глупую ошибку, что и я; убедитесь, что вы не перезаписываете содержимое активности где-либо (то есть ищите дополнительные вызовы для setContentView)

В моем случае из-за неосторожного копирования и вставки я использовал DataBindingUtil.setContentView в своем фрагменте вместо DataBindingUtil.inflate, который испортил состояние действия.


3

У меня была такая же проблема, позвольте мне опубликовать мой код, чтобы вы все могли его увидеть, а не делать то же самое, что я сделал.

@Override
protected void onResume()
{
    super.onResume();

    fragManager = getSupportFragmentManager();

    Fragment answerPad=getDefaultAnswerPad();
    setAnswerPad(answerPad);
    setContentView(R.layout.abstract_test_view);
}
protected void setAnswerPad(AbstractAnswerFragment pad)
{
    fragManager.beginTransaction()
        .add(R.id.AnswerArea, pad, "AnswerArea")
        .commit();
    fragManager.executePendingTransactions();
}

Обратите внимание, что я настраивал фрагменты раньше, чем я setContentView. По электронной почте Ой.


1
Спасибо! Я делал то же самое, поэтому я положил свой setContentViewвнутрьonBuildHeaders
Рэнди

3

Эта страница, кажется, является хорошим центральным местом для размещения предложений об исключительной ситуации фрагмента IllegalArgumentException. Вот еще одна вещь, которую вы можете попробовать. Вот что наконец-то сработало для меня:

Я забыл, что у меня был отдельный файл макета для альбомной ориентации. После того, как я добавил туда свой контейнер FrameLayout, фрагмент сработал.


С другой стороны, если вы уже попробовали все остальное, предложенное на этой странице (и во всем Интернете), и часами выдергивали свои волосы, подумайте о том, чтобы просто выбросить эти надоедливые фрагменты и вернуться к старой доброй стандартной компоновке. (Это именно то, чем я занимался, когда наконец обнаружил свою проблему.) Вы все еще можете использовать концепцию контейнера. Однако вместо того, чтобы заполнять его фрагментом, вы можете использовать includeтег xml, чтобы заполнить его тем же макетом, который вы использовали бы в своем фрагменте. Вы можете сделать что-то вроде этого в вашем основном макете:

<FrameLayout
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <include layout="@layout/former_fragment_layout" />

</FrameLayout>

где former_fragment_layout- имя файла макета xml, который вы пытались использовать в своем фрагменте. Посмотрите Повторное использование Макетов с включением для получения дополнительной информации.


Это хорошее предложение, но оно не работает, если нужно динамически переключать фрагменты. Также это уменьшает возможность повторного использования, потому что вы можете инкапсулировать поведение (код) во фрагменте.
Александр Малахов

Я определенно согласен. Фрагменты намного лучше.
Сурагч

2

В моем случае у меня был элемент SupportMapFragment в элементе представления рециркулятора (я использовал нижний заголовок «liteMode», который делает карту неинтерактивной, почти как статичное изображение). Я использовал правильный FragmentManager, и все, казалось, работало нормально ... с небольшим списком. Как только список элементов немного превысил высоту экрана, я начал испытывать эту проблему при прокрутке.

Оказалось, это потому, что я вставлял динамический SupportMapFragment в представление, которое было внутри другого фрагмента, чтобы обойти некоторые проблемы, которые у меня возникали при попытке объявить его статически в моем XML. Из-за этого компоновка местозаполнителя фрагмента могла быть заменена фактическим фрагментом только после того, как представление было присоединено к окну, то есть видно на экране. Поэтому я поместил свой код для инициализации SupportMapFragment, выполнения замены фрагмента и вызова getMapAsync () в событии onAttachedToWindow.

Что я забыл сделать, так это убедиться, что мой код не запускался дважды. Т.е. в событии onAttachedToWindow, проверьте, был ли мой динамический SupportMapFragment все еще нулевым, прежде чем пытаться создать его новый экземпляр и выполнить замену фрагмента. Когда элемент выходит за верхнюю часть RecyclerView, он отсоединяется от окна, а затем снова присоединяется, когда вы возвращаетесь к нему, так что это событие вызывается несколько раз.

После того, как я добавил нулевую проверку, это произошло только один раз для каждого элемента RecyclerView, и проблема исчезла! TL; DR!


2

Это происходит, когда вы звоните из фрагмента внутри другого.

использовать:

getActivity().getSupportFragmentManager().beginTransaction();

1

Я столкнулся с этой проблемой, когда попытался заменить представление своим фрагментом в onCreateView(). Как это:

public class MyProjectListFrag extends Fragment {


    private MyProjectListFragment myProjectListFragment;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        FragmentManager mFragmentManager = getFragmentManager();
        myProjectListFragment = new MyProjectListFragment();
        mFragmentManager
                .beginTransaction()
                .replace(R.id.container_for_my_pro_list,
                        myProjectListFragment, "myProjectListFragment")
                .commit();
    }

Мне сказали

11-25 14:06:04.848: E/AndroidRuntime(26040): java.lang.IllegalArgumentException: No view found for id 0x7f05003f (com.example.myays:id/container_for_my_pro_list) for fragment MyProjectListFragment{41692f40 #2 id=0x7f05003f myProjectListFragment}

Затем я исправил эту проблему с помощью замены onActivityCreated(). Как это:

public class MyProjectListFrag extends Fragment {

    private final static String TAG = "lch";

    private MyProjectListFragment myProjectListFragment;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        return inflater
                .inflate(R.layout.frag_my_project_list, container, false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);

        FragmentManager mFragmentManager = getFragmentManager();
        myProjectListFragment = new MyProjectListFragment();
        mFragmentManager
                .beginTransaction()
                .replace(R.id.container_for_my_pro_list,
                        myProjectListFragment, "myProjectListFragment")
                .commit();

    }
  1. Вы должны вернуть представление, onCreateView()чтобы вы могли заменить его позже
  2. Вы можете поместить любую операцию в этом представлении в следующую функцию в фрагменте liftcycle, например: onActivityCreated()

Надеюсь это поможет!


1

Я исправил эту ошибку, я использую commitNow()замену commit().

mFragment.getChildFragmentManager()
  .beginTransaction()
  .replace(R.id.main_fragment_container,fragment)
  .commitNowAllowingStateLoss();

Это commitNowметод синхронизации, commit()метод является асинхронным методом.


1

В моем случае это исключение возникло, когда я использовал разные идентификаторы для одного и того же элемента макета (заполнителя фрагмента), в то время как у меня было несколько из них для разных вариантов сборки. По какой-то причине он работает отлично, когда вы заменяете фрагмент в первый раз, но если вы попытаетесь сделать это снова, вы получите это исключение. Поэтому убедитесь, что вы используете один и тот же идентификатор, если у вас есть несколько макетов для разных вариантов сборки.


0

Если вы пытаетесь заменить фрагмент внутри фрагмента на, fragmentManagerно вы не надуваете родительский фрагмент, это может вызвать проблему.

В BaseFragment.java OnCreateView :

if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .replace(R.id.container, new DifferentFragment())
                    .commit();
        }

return super.onCreateView(inflater, container, savedInstanceState);

Замените super.onCreateView(inflater, container, savedInstanceState); надуванием правильное расположение фрагмента:

        return inflater.inflate(R.layout.base_fragment, container, false);

0

У меня была такая же проблема, когда выполнял транзакцию фрагмента при создании активности.

Основная проблема в том, что Ник уже указал - дерево представлений еще не раздуто. Но его решение не сработало - такое же исключение в onResume, onPostCreate и т. Д.

Решение состоит в том, чтобы добавить обратный вызов к фрагменту контейнера, чтобы сообщить, когда он будет готов:

public class MyContainerFragment extends Fragment {
    public static interface Callbacks {
        void onMyContainerAttached();
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        Log.d(TAG, "--- onAttach");
        ((Callbacks) activity).onMyContainerAttached();
    }

    //... rest of code
}

И тогда в деятельности:

public class MainActivity extends Activity
        implements MyContainerFragment.Callbacks
{
    @Override
    public void onMyContainerAttached() {
        getFragmentManager()
                .beginTransaction()
                .replace(R.id.containerFrame, new MyFragment())
                .commit();
    }

    //...
}

0

В моем случае я использовал файл класса фрагмента для объявления класса адаптера списка. Я просто использовал другой файл для класса общего адаптера, и ошибка исчезла.


0

Эта проблема также происходит , когда вы не ставите <include layout="@layout/your_fragment_layout"/>в вашемapp_bar_main.xml


0

Это происходит также, когда у вас есть два представления в двух фрагментах с одинаковыми идентификаторами


Это неверно В этом случае код даже не скомпилируется.
Таслит Осень

0

У меня была та же проблема, что и была вызвана тем, что я пытался добавить фрагменты перед добавлением макета контейнера в действие.


0

Иногда это потому, что вы используете BottomNavigationView. Если вы открываете Intent из навигации и в этом упражнении вы открываете фрагмент, скажем

transaction.replace(R.id.container,new YourFragment());

тогда действие не сможет найти используемый вами способ навигации.

РЕШЕНИЕ. Измените действие на фрагмент и обработайте навигацию с помощью addOnBackStack в вашем приложении. Если вы внедрили Jetpack Navigation, просто используйте фрагменты в вашем проекте.


0

В моем случае. У меня есть несколько Activityминут, Fragmentкогда мне нужно восстановить, Fragmentкогда

  • язык меняется
  • макет фрагмента, некоторые не нуждаются, некоторые не нуждаются, или изменение содержания необходимо воссоздать
  • другие изменения
  • Я очищаю все Fragments и устанавливаю все вnull в активность, но Fragment уже создает сам себя, в то время как для его активности на хосте установлено значение NULL, поэтому перед вызовом Fragment view проверьте его на NULL.

    например

    Activity{
        fragment
        recreate{
           fragment = null then new instance
        }
    
    }
    
    Fragment{
        if((activity).fragment != null) {
           findViewById()
        }
    
    }
    Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
    Licensed under cc by-sa 3.0 with attribution required.