Исключение Android IllegalArgumentException: Тег для fragment_XXX недопустим. Получено: макет-sw600dp/фрагмент_XXX_0

#android #android-layout #android-databinding

Вопрос:

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

Однако на данный момент я не могу разрешить исключение, как написано в названии, потому что оно отображается каждый раз, когда я запускаю свое приложение. До этого исключения у меня была другая папка макета под названием layout-land, а затем я просто удалил эту папку и переместил ее содержимое в папку layout-sw600dp.

Я перепробовал несколько способов решения этой проблемы:

  1. Я удалил все дополнительные папки с макетом (- ами)w*
  2. Перезапустил Android Studio и аннулировал кэш
  3. Проект очищается/перестраивается несколько раз

Есть ли что-нибудь еще, что могло бы мне помочь?

Редактировать

 java.lang.IllegalArgumentException: The tag for fragment_XXX is invalid. Received: layout-sw600dp/fragment_XXX_0
   at com.example.myapp.DataBinderMapperImpl.getDataBinder(DataBinderMapperImpl.java:422)
   at androidx.databinding.MergedDataBinderMapper.getDataBinder(MergedDataBinderMapper.java:79)
   at androidx.databinding.DataBindingUtil.bind(DataBindingUtil.java:199)
   at androidx.databinding.DataBindingUtil.inflate(DataBindingUtil.java:130)
   at androidx.databinding.ViewDataBinding.inflateInternal(ViewDataBinding.java:1409)
   at com.example.myapp.databinding.FragmentXXXBinding.inflate(FragmentLoginBinding.java:146)
   at com.example.myapp.databinding.FragmentXXXBinding.inflate(FragmentLoginBinding.java:132)
   at com.example.myapp.XXXFragment.onCreateView(LoginFragment.java:74)
   at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963)
   at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518)
   at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282)
   at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189)
   at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2106)
   at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002)
   at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524)
   at android.os.Handler.handleCallback(Handler.java:938)
   at android.os.Handler.dispatchMessage(Handler.java:99)
   at android.os.Looper.loop(Looper.java:246)
   at android.app.ActivityThread.main(ActivityThread.java:8506)
   at java.lang.reflect.Method.invoke(Native Method)
   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
 

Комментарии:

1. Опубликуйте трассировку стека. Это может быть полезно. Кроме того, почему вы удаляете/перемещаете/рефакторингуете файлы макетов для тестирования нескольких файлов макетов?

2. Опубликовал дорожку стека, см. ниже «ПРАВКА» в главном посте. Я делаю это, потому что мне может понадобиться, чтобы некоторые макеты поддерживались на меньших или больших экранах. Так что есть случай, когда первоначально я бы создал макет для экранов с меньшей шириной 600dp, а затем я решил использовать этот макет на еще меньших экранах, чем 600dp.

3. Ошибка связана с привязкой данных, и похоже, что вы делаете все правильно в отношении того, как оправиться от ошибки. По моему опыту, привязка данных иногда может переходить в странное состояние. Иногда перезагрузка компьютера решала проблемы с привязкой данных, но я не могу сказать, почему. Вы можете попробовать аннулировать кэш, закрыть AS, а затем вручную удалить все файлы сборки напрямую, а также удалить файл .idea в корневом каталоге вашего проекта перед перезапуском AS.

4. Во-первых, большое спасибо за ваши ответы @Cheticamp! Во-вторых, я все еще не в состоянии найти решение своей проблемы. Я также сделал я то, что прочитал в этой статье!

5. Если вы все это сделали, то проблема, вероятно, в вашем коде. Я бы покопался там в следующий раз. Возможно, установите точку останова в коде, вызывающем исключение, чтобы получить представление о том, что происходит.