Двустороннее связывание Spinner с использованием selectedItemPosition - PullRequest
0 голосов
/ 25 марта 2020

После проверки официального действия c, если я хочу привязать данные к моей модели представления, мне нужно использовать selectedItemPosition в моем файле xml.

<Spinner
    android:id="@+id/categorySpinner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:selectedItemPosition="@={viewModel.categoryIdItemPosition}"
/>

Но я обнаружил, что есть no android: опция selectedItemPosition под тегом Spinner.

1 Ответ

1 голос
/ 25 марта 2020

Попробуйте android.support.v7.widget.AppCompatSpinner с selectedItemPosition

Пример Item.class

public class Item extends BaseObservable {
    private int selectedItemPosition;

    @Bindable
    public int getSelectedItemPosition() {
        return selectedItemPosition;
    }

    public void setSelectedItemPosition(int selectedItemPosition) {
        this.selectedItemPosition = selectedItemPosition;
    }
}

activity_main. xml

<variable
    name="item"
    type="com.sample.data.Item"/>

<android.support.v7.widget.AppCompatSpinner
    ...
    android:entries="@array/items"
    android:selectedItemPosition="@={item.selectedItemPosition}"
    >

MainActivity. java

public class MainActivity extends AppCompatActivity {
    ActivityMainBinding binding;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        binding.setItem(new Item());
        binding.getItem().setSelectedItemPosition(4); // this will change spinner selection.
        System.out.println(getResources().getStringArray(R.array.items)[binding.getItem().getSelectedItemPosition()]);
    }
}

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

binding.getItem().getSelectedItemPosition(); // get selected position
getResources().getStringArray(R.array.items)[binding.getItem().getSelectedItemPosition()]) // get selected item
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...