ОК, вы не можете установить спиннер в значение c, если вы используете Android предоставленные ресурсы, такие как R.layout.support_simple_spinner_dropdown_item. Как я отметил в комментариях к исходному вопросу, ArrayAdapter создал представление, к которому у вас нет доступа. Это требует, чтобы вы создали собственный адаптер. Есть много примеров этого в Интернете и в стеке.
Центральным моментом является объявление вашего блесна в файле макета xml действия, например:
<Spinner
android:id="@+id/spinner"
style="@style/Spinner"
android:prompt="@string/select_provider_type"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvProviderTitle" />
и элемент TextView, в который адаптер запишет значения вашего spinnerList в свой собственный файл xml:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/typeName"
style="@style/TypeName"/>
TextView будет заполнен вашим пользовательским адаптером с помощью метода getView () для самого счетчика. и метод getDropDownView () для расширенного списка по щелчку:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.d(TAG, "Entered: getView");
convertView = mLayoutInflater.inflate(R.layout.type_name_only, null);
TextView typeName = convertView.findViewById(R.id.typeName);
typeName.setText(types.get(position));
return convertView;
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
Log.d(TAG, "Entered: getDropDownView");
convertView = mLayoutInflater.inflate(R.layout.type_name_only, null);
TextView typeName = convertView.findViewById(R.id.typeName);
typeName.setText(types.get(position));
typeName.setBackgroundColor(GREEN);
typeName.setTextColor(BLUE);
return convertView;
}
Обратите внимание, что вы также должны переопределить метод getCont (), чтобы адаптер мог определить, сколько элементов добавить в спиннер:
@Override
public int getCount() {
return yourList.size();
}
Если это не очевидно для вас, это не было для меня сначала, вы не объявляете и не устанавливаете свой TextView в своей Деятельности, только свой счетчик:
mSpinner = findViewById(R.id.spinner);
В своей деятельности установите спиннер для указанного элемента c в своем списке следующим образом:
mSelectTypeAdapter = new SelectTypeAdapter(mContext, R.id.spinner, spinnerList);
mSpinner.setAdapter(mSelectTypeAdapter);
mSpinner.setOnItemSelectedListener(this);
mSpinner.setSelection(spinnerList.indexOf(itemToBeSelected), true);
ViewGroup viewGroup = findViewById(android.R.id.content);
mSelectTypeAdapter.getView(spinnerList.indexOf(itemToBeSelected), mSpinner, viewGroup);
- mSpinner.setSelection () выбирает указанный список списка c для отображения, в этом в этом случае itemToBeSelected spinnerList item
- ViewGroup относится к группе «this» Activity
- mSelectTypeAdapter.getView () устанавливает элемент списка, который должен отображаться в счетчике в соответствии с его индексом в spinnerList
Android отобразит каждый из элементов вашего списка в своем собственном TextView в бланке Activity, как вы установили в методах getView () и getDropDownView () адаптера. Я сделал мой очень красочным и другим, чтобы убедиться, что он работает так, как я думал.