Kotlin – идиоматический способ создания фрагмента newInstance pattern

Лучшей практикой Android для создания Fragment является использование статического заводского метода и передача аргументов в Bundle через setArguments() .

В Java это делается примерно так:

 public class MyFragment extends Fragment { static MyFragment newInstance(int foo) { Bundle args = new Bundle(); args.putInt("foo", foo); MyFragment fragment = new MyFragment(); fragment.setArguments(args); return fragment; } } 

В Котлине это преобразуется в:

 class MyFragment : Fragment() { companion object { fun newInstance(foo: Int): MyFragment { val args = Bundle() args.putInt("foo", foo) val fragment = MyFragment() fragment.arguments = args return fragment } } } 

Это имеет смысл поддерживать взаимодействие с Java, поэтому его все равно можно вызвать через MyFragment.newInstance(...) , но есть ли более идиоматический способ сделать это в Kotlin, если нам не нужно беспокоиться о Java-взаимодействии?

Мне нравится делать это так:

 companion object { private const val MY_BOOLEAN = "my_boolean" private const val MY_INT = "my_int" fun newInstance(aBoolean: Boolean, anInt: Int) = MyFragment().apply { arguments = Bundle(2).apply { putBoolean(MY_BOOLEAN, aBoolean) putInteger(MY_INTEGER, anInt) } } } 
Intereting Posts
nullPointerException на вспомогательном классе sharedpreferences При запуске теста Неразрешенный справочник KClass пытается использовать DBFlow и Kotlin с Android Невозможно посмотреть переменную Kotlin в студии Android RxJava (Kotlin), Observable.amb и PublishSubject не стреляют Можно ли ограничить тип списка реализацией интерфейса в Котлин? Как динамически масштабировать отскок потока эмиссионных выбросов? Напиши Скопируемый интерфейс более элегантный, чем в Java Котлин и подробный экземпляр массива Kotlin и привязка данных для Android (BuildTools 2.0.0) Уведомления Android не отображаются на эмуляторе, запущенном API 27 Kotlin: @ Игнорирует свойства, сохраняемые Sugar ORM Как получить второй фрагмент из списка popBackStack в pop? Gradle. Котлин – возможно ли создать динамические задачи («на лету»)? Kotlin более высокий порядок (вызываемые ссылки) компилятор сбой Как использовать MapBuilder в kotlin и добавить все значения?