Фрагмент Android не знайдено подання для ідентифікатора?


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?
jsmith

1
Можна отримати таку ж помилку під час здійснення фрагментної транзакції перед тим, як зателефонувати на setContentView у діяльності
Павло

Відповіді:


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/…
Vamsi Challa

3
Сталося зі мною. Недолік CTRL + C CTRL + V.
0nyx

296

Ця помилка також виникає при вкладенні фрагментів і додаванні їх за допомогою 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 (), і це працює !!
Шям

У моєму випадку я використовував навігацію по фрагментах, використовуючи viewpager у нижньому фрагменті аркуша. Ваше рішення спрацювало блискуче !! Тонни брокера «Thanx».
Debasish Ghosh

1
була така ж проблема, і це вирішило її для мене! getChildFragmentManager () замість getActivity (). getFragmentManager (), що має сенс, коли я думав про це :) TY!
Саймон

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

29

У мене була ця проблема (під час створення мого інтерфейсу користувача в коді), і це було викликано тим, що мій ViewPager(що показав Fragment) не мав набір ідентифікатора, тому я просто використовував pager.setID(id)і тоді він працював.

Ця сторінка допомогла мені зрозуміти це.


1
У мене була така ж проблема, коли я використовував viewPager. Ця ж помилка була виправлена ​​за допомогою viewPager.setCurrentItem (n) перед виконанням транзакції. Можливо, комусь це стане в нагоді.
Кірк Хамметт

У моєму випадку було в аналогічному напрямку, але проблема полягала в тому, що я використав негативне значення у .setID. Використання додатного цілого числа вирішило проблему.
Ігнасіо Хагопян

29

Ще один сценарій, який я зустрічав. Якщо ви використовуєте вкладені фрагменти, скажіть ViewPager у фрагменті з його сторінками також фрагментами.

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

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

getActivity () є ключовим тут. ...


так ... для мене вся інша реалізація була відмінною від цього. Я безпосередньо намагався отримати доступ до такого коду: транзакція FragmentTransaction = getSupportFragmentManager (). BeginTransaction (); Тоді я отримав менеджер фрагментів, використовуючи getActivity () окремо, як ви згадали. Це працює досить
Ананд Кріш,

18

У моєму випадку я намагався показати DialogFragment, що містить пейджер, і це виключення було скинуто, коли FragmentPagerAdapter намагався додати фрагменти до пейджера. Виходячи з відповіді howettl, я здогадуюсь, що це було пов'язано з батьківським пейджером, а не з представленням 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
Abdalrahman Shatou

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 w / LinuxOS це: / home / bob / AndroidStudioWorkspace / HelloWorld / додаток / build / generated / source / r / release / android / support / v7 / appcompat.
portsample

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: Не знайдено перегляду для ідентифікатора


але всередині перехідника косяк imprt getchildFragmentManger чому
Суніл Чаудхари

8

Я знаю, що на це вже відповіли за одним сценарієм, але моя проблема була дещо іншою, і я подумав, що поділюся на випадок, якщо хтось ще буде в моєму взутті.

Я робив транзакцію всередині onCreate(), але в цей момент дерево перегляду не було завищене, тому ви отримуєте цю саму помилку. Введення коду транзакції onResume()змусило все працювати нормально.

Тому просто переконайтеся, що ваш код транзакції працює після того, як дерево перегляду було завищене!


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

@IgorGanapolsky теж у моєму випадку вирішив це із зворотним викликом з фрагмента onAttach. Дивіться мою відповідь
Олександр Малахов

Це була саме моя проблема. Заклик до іншого класу для оновлення стану перегляду здійснював транзакцію з фрагментами на макеті, який ще не був завищений. Викликавши його в onResume (), виправлено проблему.
AWT

8

Під час використання Viewpager у режимі перегляду Recycler я зіткнувся з помилкою Nasty. Нижче помилки я зіткнувся в особливій ситуації. Я запустив фрагмент, який мав RecyclerView з Viewpager (використовуючи FragmentStatePagerAdapter). Він працював добре, поки я не переключився на інший фрагмент при натисканні стільника в RecyclerView, а потім повернувся назад за допомогою апаратної кнопки "Назад", і додаток вийшов з ладу.

І що смішного в цьому було те, що у мене було два Viewpager у тому ж RecyclerView, і обидва були приблизно в 5 клітинках (інших не було видно на екрані, це було вниз). Тож спочатку я просто застосував Рішення до першого Viewpager, а інший залишив таким, яким він є (Viewpager, використовуючи фрагменти).

Навігація назад спрацювала чудово, коли перший пейджер огляду був видно. Тепер, коли я прокрутився до другого, а потім змінив фрагмент і повернувся, він розбився (те ж саме сталося і з першим). Тому мені довелося змінити обох Viewpagers.

У будь-якому випадку читайте нижче, щоб знайти робоче рішення. Помилка аварії нижче:

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

Провів налагодження. Прочитайте цю повну тему донизу, застосувавши всі рішення, включаючи переконання, що я проходжу childFragmentManager.

Нічого не працювало.

Нарешті, замість того, щоб використовувати FragmentStatePagerAdapter, я розширив PagerAdapter і використав його в Viewpager, не використовуючи фрагментів. Я вірю деяким, де є БУГ з вкладеними фрагментами. У всякому разі, у нас є варіанти. Читати ...

Нижче посилання було дуже корисно:

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;
}

}

Сподіваюся, це було корисно !!


Так, це рішення спрацювало, але що робити, якщо мені потрібна складна конструкція з власним життєвим циклом та змінними, але не лише поглядами? Він буде використовуватися для відеовигляду та imageView з кнопками відтворення та відключення звуку. Нічого не корисного для мого випадку?
Микита Аксьонов

Я вважаю, що це причина: stackoverflow.com/a/27966053/1377819
Hoang Nguyen Huu

7

У мене був той самий випуск, але мій випуск відбувався зі зміни орієнтації. Жодне з інших рішень не працювало. Ось і виходить, що я забув видалити setRetainInstance(true);свої фрагменти, роблячи макет двох або однієї панелі залежно від розміру екрана.


перетворіть помилковий ваш 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. Ви можете поставити будь-яку операцію щодо цього виду за допомогою наступної функції у фрагменті ліфтового циклу, наприклад 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. Якщо ви відкриєте Намір з навігації, і в цій діяльності ви відкриєте фрагмент, що дозволяє сказати

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

тоді Активність не зможе знайти метод навігації, який ви використовуєте.

РІШЕННЯ: Змініть активність на фрагмент і обробляйте навігацію за допомогою addOnBackStack у вашому додатку. Якщо ви реалізували навігацію Jetpack, просто використовуйте фрагменти у своєму проекті.


0

У моєму випадку. У мене є Activityз Serveral Fragmentсек деякий час мені відтворювати Fragments , коли

  • мова - зміна
  • фрагмент макет деякі потребують деякі не потребують або зміна вмісту потрібно відтворити
  • інші зміни
  • Я очищую всі Fragments і встановлюю всіnull очищую в активності, але фрагмент вже створюється сам, в той час як активність хосту - bean set 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.