реализовать как параметр конструктора на фрагменте - PullRequest
0 голосов
/ 24 марта 2020

Мой BaseFragment выглядит как

abstract class BaseFragment: Fragment()
    protected abstract val layoutId: Int {
}

, и я использую опцию intellij implement as constructor parameter для моего ChildFragment

, тогда Мой ChildFragment выглядит как

class ChildFragment(
    override val layoutId: Int = R.layout.fragment_child
) : BaseFragment() {
}

и часть ChildFragment's Java code имеет конструктор по умолчанию

   // $FF: synthetic method
   public BestFragment(int var1, int var2, DefaultConstructorMarker var3) {
      if ((var2 & 1) != 0) {
         var1 = -1300103;
      }

      this(var1);
   }

   public BestFragment() {
      this(0, 1, (DefaultConstructorMarker)null);
   }

, но intellij сообщает об ошибке Àvoid none default constructors in Fragment

Я думал, что не было проблем с написанием implement as constructor parameter, потому что он использует конструктор по умолчанию, но это Узор

1 Ответ

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

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

Добавление уникальных конструкторов в представления (кроме уже существующих 3) не одобряется для та же причина.

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