ViewGroup.findViewById () возвращает значение NULL, поскольку представление имеет другой идентификатор во время выполнения - PullRequest
0 голосов
/ 14 апреля 2020
  • В методе фрагмента onCreateView() я пытаюсь инициализировать CustomView с поведением, аналогичным потрясающей кнопке.
  • После нажатия на это пользовательское представление предполагается запуск анимации, которая использует пустой RelativeLayout, который присутствует в родительском элементе ViewGroup во фрагменте.
  • Я передаю этот ViewGroup в CustomView в конструкторе .
  • Когда я пытаюсь создать ссылку на пустое значение RelativeLayout, вызывая ViewGroup.findViewById(R.id.target), ссылка на создание сохраняет нулевое значение, в конечном итоге вызывая NullPointerException при анимации
  • Однако, если я использую ViewGroup.getChildAt(1) для создания ссылки анимация работает просто отлично.
  • Используя наблюдателей, я обнаружил, что идентификатор ViewGroup.getChildAt(1) отличается от идентификатора R.id.target, который был назначен ему через xml.
  • Что это за колдовство?
  • Я просматривал уже несколько дней, чтобы найти вопрос, который описывает эту ситуацию.

Дополнительная информация:

  1. Мы недавно переключились ched из библиотек поддержки на androidX.
  2. фрагмент. xml
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/top_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout>
        <!-- Other views -->
    </LinearLayout>


    <!-- This is the layout i am trying to instantiate -->
    <RelativeLayout
        android:id="@+id/target"/>

</RelativeLayout>
...