如何使用视图模型(DataBinding)绑定 Spinner 数据

How to bind Spinner data using view model (DataBinding)

我是数据初学者 binding.I 正在尝试使用数据绑定从我的视图模型中获取微调项并在 android:entries 中设置值,但问题是我的微调器没有显示项目。

这是我的布局

<layout>
<data>

<import type="com.saddan.sanidadvegetalsyscomed.viewmodel.TableDataViewModel"/>

<variable
   name="model"
   type="TableDataViewModel" />

  </data>

  <androidx.constraintlayout.widget.ConstraintLayout xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="#ffffff"
android:layout_margin="20dp"
android:padding="5dp"
tools:context=".Fragment.First_Form_Fragment">


<Spinner
    style="@android:style/Widget.TextView.SpinnerItem"
    android:id="@+id/ext_tipo_inspection"
    android:layout_width="320dp"
    android:layout_height="@dimen/EditTextFieldHeight"
    android:entries="@{model.spinerInspecion}"
    />

</androidx.constraintlayout.widget.ConstraintLayout>

</layout>

这是我的视图模型class

public class TableDataViewModel extends AndroidViewModel
{

private String TAG=getClass().getSimpleName();
private UserAccessToken userAccessToken;
private SanidadDAO sanidadDAO;
private Context context;
private LiveData<List<String>> spinnerItem;
private LiveData<List<String>> spinerInspecion;


public TableDataViewModel(@NonNull Application application)
{
    super(application);
    userAccessToken=new UserAccessToken(application);
    SanidadVegetalDatabase database = SanidadVegetalDatabase.getDatabase(application);
    sanidadDAO = database.getDao();
    context=application;
    spinerInspecion=getmCommonData("tipoinspeccion");
    if(spinerInspecion!=null)
    {
        Log.d(TAG, "TableDataViewModel: yrs");
    }

}

public LiveData<List<String>> getmCommonData(String queryType)
{
    spinnerItem=sanidadDAO.getType(queryType);

    //Toast.makeText(context, ""+mCommonData, Toast.LENGTH_SHORT).show();

    return spinnerItem;
}


public LiveData<List<String>> getSpinerInspecion()
{

    return spinerInspecion;
}

public void setSpinerInspecion(LiveData<List<String>> spinerInspecion)
{
    this.spinerInspecion = spinerInspecion;
}

@Override
protected void onCleared()
{
    super.onCleared();
}
 }

这里是我的 Fragment 的 onViewCreated 方法,我在其中初始化绑定

tableDataViewModel= new ViewModelProvider(getActivityNonNull()).get(TableDataViewModel.class);
binding.setModel(tableDataViewModel);

这里的问题是您没有将值设置为 spinerInspecion,您正在为其分配一个新的 LiveData。这就是为什么观察者永远不会在实例上被调用的原因。将您的方法修改为:-

public List<String> getmCommonData(String queryType) {
    spinnerItem=sanidadDAO.getType(queryType);
    return spinnerItem;
}

然后将值设置为:-

spinerInspecion.setValue(getmCommonData("tipoinspeccion"));