Использование LiveData в Spinner - PullRequest
0 голосов
/ 28 января 2020

Я новее в android. Я использую базу данных комнат, AndroidViewModel и LiveDate в своем проекте. В моем проекте есть модель "Квитанция", у меня есть действие с именем "AddReceiptActivity", в котором есть Spinner для отображения и выбора Place. Есть еще одна модель для Place, которая хранит места. Как отобразить значения таблицы (модели) в Spinner для выбора. это моя сущность Place

@Entity
public class Place implements Serializable {
@PrimaryKey(autoGenerate = true)
private Integer placeId;
private String placeName;

public Place(String placeName, Boolean removed) {
    this.placeName = placeName;
    this.removed = removed;
}

public Integer getPlaceId() {
    return placeId;
}

public void setPlaceId(Integer placeId) {
    this.placeId = placeId;
}

public String getPlaceName() {
    return placeName;
}

public void setPlaceName(String placeName) {
    this.placeName = placeName;
}
}

, а моя ViewModel

public class AddReceiptViewModel extends AndroidViewModel {
DataBase database;

public AddReceiptViewModel(@NonNull Application application) {
    super(application);
    database = DataBase.getDataBase(this.getApplication());
}

public void addRceipt(final Receipt receipt) {
    new AddAsyncTask(database).execute(receipt);
}

private static class AddAsyncTask extends AsyncTask<Receipt, Void, Void> {
    DataBase db;

    public AddAsyncTask(DataBase db) {
        this.db = db;
    }

    @Override
    protected Void doInBackground(Receipt... receipts) {
        db.receiptDao().add(receipts[0]);
        return null;
    }
}
}

Теперь я не знаю, как установить данные из моей модели в Spinner в Activity.

     AddReceiptViewModel addReceiptViewModel = ViewModelProviders.of(this).get(AddReceiptViewModel.class);

     Spinner spinner = findViewById(R.id.spinnerLoadingPlace);

1 Ответ

0 голосов
/ 28 января 2020

Я предполагаю, что у вас есть список, который является списком мест магазина.

Скажем, List<Place> places = new ArrayList<>();

Прежде всего, вы должны ovverride метод toString для модели Place, чтобы поставить имя каждого поместите в счетчик.

@ovverride
public String toString(){
 return this.placeName;
}

В вашем классе деятельности вы поместите список в счетчик с помощью этой функции;

public void setList(){
ArrayAdapter<Place> adapter =
                new ArrayAdapter<Place>(getApplicationContext(),  android.R.layout.simple_spinner_dropdown_item, places);
        adapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item);

        spinner.setAdapter(adapter);
}

И, наконец, вы можете получить выбранный элемент;

Place selectedPlace = (Place) spinner.getSelectedItem();
...