Cómo utilizar la vinculación de datos con Fragment

Estoy tratando de seguir el ejemplo de enlace de datos del documento oficial de google https://developer.android.com/tools/data-binding/guide.html

Excepto que estoy tratando de aplicar datos-biding a un fragmento, no una actividad.

El error que estoy obteniendo actualmente al compilar es

Error:(37, 27) No resource type specified (at 'text' with value '@{marsdata.martianSols}.

onCreate para fragmento se ve así:

 @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); MartianDataBinding binding = MartianDataBinding.inflate(getActivity().getLayoutInflater()); binding.setMarsdata(this); } 

onCreateView para el fragmento se ve así:

 @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.martian_data, container, false); } 

Y partes de mi archivo de diseño para el fragmento se ve así:

 <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="marsdata" type="uk.co.darkruby.app.myapp.MarsDataProvider" /> </data> ... <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@{marsdata.martianSols}" /> </RelativeLayout> </layout> 

Mi sospecha es que MartianDataBinding no sabe con qué archivo de diseño se supone que está enlazado con – de ahí el error. ¿Alguna sugerencia?

La implementación de vinculación de datos debe estar en el método onCreateView del fragmento, eliminar cualquier enlace de datos existente en su método OnCreate, su onCreateView debería tener el siguiente aspecto:

 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { MartianDataBinding binding = DataBindingUtil.inflate( inflater, R.layout.martian_data, container, false); View view = binding.getRoot(); //here data must be an instance of the class MarsDataProvider binding.setMarsdata(data); return view; } 

Realmente se le anima a utilizar el método de inflate de su vinculación generada y no el DataBindingUtil:

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

Docs para DataBindingUtil.inflate () :

Utilice esta versión sólo si layoutId se desconoce de antemano. De lo contrario, utilice el método de inflación de Binding generado para garantizar la inflación de tipo seguro.

Uno puede simplemente recuperar el objeto de vista como se menciona a continuación

 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = DataBindingUtil.inflate(inflater, R.layout.layout_file, container, false).getRoot(); return view; } 

Trabajando en mi código.

 private FragmentSampleBinding dataBiding; private SampleListAdapter mAdapter; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); dataBiding = DataBindingUtil.inflate(inflater, R.layout.fragment_sample, null, false); return mView = dataBiding.getRoot(); } 

Prueba esto en DataBinding de Android

 FragmentMainBinding binding; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { binding = DataBindingUtil.inflate(inflater, R.layout.fragment_main, container, false); View rootView = binding.getRoot(); initInstances(savedInstanceState); return rootView; } 
  • Java.lang.NullPointerException en el uso de Butterknife en un fragmento
  • Cómo cambiar la orientación de fragmentos en android
  • ¿Por qué mi inicio de sesión de facebook android sdk se llama dos veces?
  • ¿Cuándo el fragmento está finalmente conectado a la actividad?
  • ¿Por qué debo usar fragmento en Android?
  • Cómo reiniciar la cámara de manera eficiente en un fragmento - Barcode Scanner
  • Usando onSaveInstanceState con fragmentos en backstack?
  • Obtener Fragmento dinámicamente adjunto a <FrameLayout>?
  • Fragmentos y receptores de emisión
  • Viewpager en el fragmento no se muestra (restaurado) cuando vuelve de otro fragmento
  • Problemas con pantallas de preferencias de doble panel
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.