Фрагмент Android для ID не найден? - PullRequest
253 голосов
/ 22 сентября 2011

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

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.
Я правильно кодирую это выше?

Ответы [ 28 ]

1 голос
/ 23 апреля 2018

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

1 голос
/ 04 мая 2018

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

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

commitNow - это метод синхронизации, commit() - это асинхронный метод.

0 голосов
/ 27 апреля 2019

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

0 голосов
/ 15 января 2016

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

0 голосов
/ 31 марта 2019

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

0 голосов
/ 24 февраля 2015

Если вы пытаетесь заменить фрагмент внутри фрагмента на 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 голосов
/ 14 мая 2019

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

0 голосов
/ 05 марта 2015

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

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

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

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

    //...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...