Можно ли сделать так что бы, когда вводишь букву для поиска в EditText, результаты выводились в ряд GridLayout и по номерам?
gridLayout = findViewById(R.id.govno)
val searchBox: EditText = findViewById(R.id.searchEditText)
buttons.sortBy { getElementNumber(it.tag.toString().split("|")[0]) }
searchBox.addTextChangedListener(object : TextWatcher{
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
hideAllButtons()
if (p0.toString().isEmpty()) {
return
}
val input = p0.toString().lowercase(Locale.getDefault())
val filteredButtons = buttons.filter {
it.tag.toString().lowercase(Locale.getDefault()).contains(input)
}
for (button in filteredButtons) {
button.visibility = View.VISIBLE
}
}
override fun afterTextChanged(p0: Editable?) {}
})
}
fun getElementNumber(symbol: String): Int {
val number = when (symbol) {
"H" -> 1
"He" -> 2
"Li" -> 3
"Be" -> 4
"B" -> 5
//Дальше кнопки
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SearchActivity"
android:background="@color/gray">
<EditText
android:id="@+id/searchEditText"
android:layout_width="300dp"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.495"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.043"
app:layout_constraintBottom_toTopOf="@id/govno"
tools:ignore="NotSibling" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/searchEditText">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintTop_toBottomOf="@+id/searchEditText">
<GridLayout
android:id="@+id/govno"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:alignmentMode="alignBounds"
android:columnCount="4"
android:rowOrderPreserved="false"
app:layout_constraintTop_toBottomOf="@id/searchEditText">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.5">
<ImageButton
android:id="@+id/buttonH"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:background="@drawable/nbutth2"
android:src="@drawable/nbutth2"
android:text="H"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.045"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
Ответы (1 шт):
Автор решения: santexnik228
→ Ссылка
надо в for
удалять представдения из родительского элемента:
for (button in filteredButtons) {
val parent = button.parent as? ViewGroup
parent?.removeView(button)// Удали кнопки из род елемента
button.visibility = View.VISIBLE
gridLayout.addView(button)
}
Дальше, поскольку ты чистишь кнопки, перенеси фильтр по порядковому номеру элемента в цикл после чистки:
for (button in filteredButtons) {
val parent = button.parent as? ViewGroup
parent?.removeView(button)
filteredButtons.sortedBy{ getElementNumber(it.tag.toString()) }// фильтр элементов по порядковому номеру
gridLayout.addView(button)
button.visibility = View.VISIBLE
}