Привязка данных Android DatabindingUtil против класса привязки

Мне было интересно, в чем разница между следующим:

binding = DataBindingUtil.inflate(inflater, R.layout.drawer_item_primary, parent, false);

vs

binding = DrawerItemPrimaryBinding.inflate(inflater, parent, false);

Есть ли различия в производительности?
Каков предпочтительный вариант использования для каждого из них?

Будем признательны за любую другую информацию!

Спасибо!


person Francois    schedule 17.08.2018    source источник


Ответы (2)


Используйте Binding class's inflate, как рекомендовано в Документация по Android.

В классе DataBindingUtil документацию вы можете посмотреть.

раздувать

T inflate (LayoutInflater inflater, 
                int layoutId, 
                ViewGroup parent, 
                boolean attachToParent)

Используйте эту версию, только если layoutId заранее неизвестен. В противном случае используйте метод inflate сгенерированного Binding, чтобы обеспечить безопасное наполнение типа.

Один из вариантов — раздуть на DataBindingUtil но только если у вас нет сгенерированного класса привязки.

Вы создали binding class, используйте этот класс вместо DataBindingUtil.

В Java

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    HomeFragmentBinding binding = HomeFragmentBinding.inflate(inflater, container, false);
    //set binding variables here
    return binding.getRoot();
}

В Котлине

lateinit var binding: HomeFragmentBinding 
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    binding = HomeFragmentBinding.inflate(inflater, container, false)
    return binding.root
}

Если ваш класс привязки макета не создан, см. этот ответ.

person Khemraj Sharma    schedule 17.08.2018

На самом деле обе вещи работают одинаково. Это не повлияет на производительность. Только одно небольшое отличие, которое я заметил, заключается в том, что если вы уверены в том, какой макет вы хотите раздуть, вы можете использовать

binding = DrawerItemPrimaryBinding.inflate(inflater, parent, false);

Но если вам нужен динамический класс привязки, вы можете использовать

int layoutId = R.layout.drawer_item_primary;
DataBindingUtil.inflate(inflater, layoutId, parent, false);

Поэтому DrawerItemPrimaryBinding.inflate(inflater, parent, false); всегда будет возвращать наш класс DrawerItemPrimaryBinding. где, если нам нужно использовать DataBindingUtil.inflate(inflater, layoutId, parent, false);, мы можем привести его в соответствии с требованиями.

Спасибо.

person Rujul Gandhi    schedule 17.08.2018