Как я могу использовать "R.id object = new R.id ();" с Build-Tools 3.6.0? - PullRequest
0 голосов
/ 25 февраля 2020

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

Раньше я просто устанавливал элементы невидимыми / исчезнувшими, но теперь у меня есть NestedScrollView с дочерним фрагментом, который содержит RecyclerView. Ребенку нужна кнопка в одном аромате, которой не должно быть в другом аромате. Если я просто установил его невидимым или пропал, макет не работает должным образом (не прокручивается, а высота слишком мала).

Я скопировал макет xml в путь фрагмента, удалил кнопку и использовал отражение во фрагментном коде, чтобы узнать, существует ли кнопка, и реализую ее код.

    Class<R.id> c = R.id.class;
    R.id object = new R.id();
    Field[] fields = c.getDeclaredFields();

    for (Field field : fields)
    {
        field.setAccessible(true);
        try
        {
            if (field.getName().equals("TheButton"))
            {
                Button tBtn = tView.findViewById((Integer) field.get(object));
                if (tBtn != null)
                    tBtn.setOnClickListener(...);
            }
        } catch (IllegalAccessException e)
        {
            e.printStackTrace();
        }
    }

После при обновлении инструментов сборки Gradle с 3.5.3 до 3.6.0 я получаю

ошибка: id () имеет частный доступ в id R.id object = new R.id ();

для строки

R.id object = new R.id();

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

Могу ли я сделать что-нибудь еще? Я хотел бы избавиться от рефлексии, но если это действительно единственный способ go, он должен работать с последними инструментами сборки ...

1 Ответ

0 голосов
/ 12 марта 2020

Кажется, что создание ароматов не стоит усилий. Они создают больше проблем, чем решают. Не было моей идеи использовать их, и я не буду использовать их снова добровольно. Даже копирование и вставка между различными проектами создает меньше проблем ... Я уберу отражение и буду избегать его любой ценой в будущем Android разработка.

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