Как связать данные Spinner, используя модель представления (DataBinding) - PullRequest
0 голосов
/ 17 апреля 2020

Я новичок в привязке данных. Я пытаюсь получить элементы счетчика из моей модели представления, используя привязку данных, и задаю значения в 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>

Вот мой класс модели представления

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();
}
 }

и вот метод onViewCreated моего фрагмента, где я инициализирую привязку

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

1 Ответ

0 голосов
/ 17 апреля 2020

Проблема в том, что вы не устанавливаете значение на spinerInspecion, вы назначаете ему новое LiveData. Вот почему наблюдатель никогда не будет вызван в инстанции. Измените свой метод как: -

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

, а затем установите значение как: -

spinerInspecion.setValue(getmCommonData("tipoinspeccion"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...