Реализация строки поиска по массиву в спинере
Есть спинер, который в виде выпадающего списка выдает список людей, содержащихся в массиве. Каким образом можно реализовать поиск по словам в этом самом спинере / списке ? (Поиск типа: вводишь первые буквы - выдает все совпадения, которые начинаются с этих букв).
Массив:
public synchronized void fillNameStocks() {
String[] tempArr = new String[arrayListMols.size() + 1];
tempArr[0] = "Не выбрано";
for (int i = 0; i < arrayListMols.size(); i++) {
tempArr[i + 1] = arrayListMols.get(i).Name;
}
MyArrayAdapter<String> adapter = new MyArrayAdapter<String>(this, R.layout.spinner_item, tempArr);
spinnerNamesOfMols.setAdapter(adapter);
spinnerNamesOfMols.setSelection(0);
spinnerNamesOfMols.setOnItemSelectedListener(new SpinnerActivity());
}
Класс со спинером:
class SpinnerActivity extends Activity implements AdapterView.OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
Log.w("Список", "Выбрана позиция : " + pos);
indexOfIdToSendNextAct = pos - 1;
}
}
UPD: Разметка спинера:
<Spinner
android:id="@+id/spinner4"
android:layout_width="271dp"
android:layout_height="37dp"
android:layout_marginTop="8dp"
android:spinnerMode="dialog"
app:layout_constraintStart_toStartOf="@+id/textView19"
app:layout_constraintTop_toBottomOf="@+id/textView19">
</Spinner>
Ответы (2 шт):
Автор решения: Cypher
→ Ссылка
Это легко реализовать с помощью AutoCompleteTextView
Создаем массив слов в strings.xml:
<string-array name="names_array">
<item>Александр</item>
<item>Алексей</item>
<item>Антон</item>
<item>Борис</item>
<item>Владимир</item>
<item>Владислав</item>
<item>Иван</item>
<item>Илья</item>
</string-array>
Activity:
class SortActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sort)
val adapter = ArrayAdapter(
this,
android.R.layout.simple_list_item_1,
resources.getStringArray(R.array.names_array)
)
autoCompleteTextView.setAdapter(adapter)
button.setOnClickListener {
Toast.makeText(this, autoCompleteTextView.text, LENGTH_SHORT).show()
}
}
}
R.layout.activity_sort:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<AutoCompleteTextView
android:id="@+id/autoCompleteTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:hint="Начните вводить имя" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ок" />
Автор решения: Сергей Беляков
→ Ссылка
Нашел в Google библиотеку, которая позволяет просто изменить одну строку (напишите com.toptoche.searchablespinnerlibrary.SearchableSpinner вместо Spinner) и добавить соответствующую зависимость в проект, и все, проблема решена.
