I have a problem with my personal adapter. When I search through the Observer pattern for information in a local database, it brings me the records but the adaptare is not called until you make a second attempt to delete and add the same petra to search. If I change the letter I have to delete it and re-enter it a second time so that it shows the help as you see in the image.
If you could help me I would appreciate it.
First search
second search. I delete the letter and enter it again
as you can see, now it works correctly.
I don't understood why.
Function call observer:
fun searchCountry(cadena:String){
var chain_1 = ""
if(cadena.trim().isNullOrEmpty()){
chain_1 = ""
}else{
chain_1 = cadena.trim() + "%"
}
locationViewModel.locationSearch(chain_1)
locationViewModel.locations.observe(this, Observer { locationList ->
autoCompleteTextView.setAdapter(LocationAdapter(this,locationList as List<Location>))
})
}
VieModel:
@HiltViewModel
class LocationViewModel @Inject constructor(private val getLocationUserCase: GetLocationUseCase) : ViewModel() {
val locations = MutableLiveData<List<Location?>>()
fun locationSearch(chain:String){
viewModelScope.launch {
val locationLst: List<Location> = getLocationUserCase(chain)
if(!locationLst?.isNullOrEmpty()){
locations.postValue(locationLst)
}else{
}
}
}
}
Adapter:
class LocationAdapter(context: Context, locations: List<Location>) : ArrayAdapter<Location>(context, 0, locations) {
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
val view = convertView ?: LayoutInflater.from(context).inflate(R.layout.account_frg_user_create_location_items, parent, false)
getItem(position)?.let { location ->
view.findViewById<TextView>(R.id.txtCountry).apply {
text = location.nom_municipio
}
view.findViewById<TextView>(R.id.txtProvince).apply {
text = location.nom_provincia
}
}
return view
}
}
XML-adapter:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="match_parent"
android:maxHeight="56dp"
android:padding="16dp"
android:layout_height="wrap_content">
<TextView
android:id="@+id/txtCountry"
android:layout_width="match_parent"
android:layout_weight="1"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1"
android:layout_height="wrap_content"
tools:text="Pueblo" />
<TextView
android:id="@+id/txtProvince"
android:layout_width="match_parent"
android:layout_weight="1"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body2"
android:gravity="end"
android:layout_height="wrap_content"
tools:text="Provincia" />
</LinearLayout>
XML-Autocomepletetextview:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<AutoCompleteTextView
android:id="@+id/autoCompleteTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=""
android:completionThreshold="1"
android:imeOptions="actionDone"
android:inputType="text"
/>
</LinearLayout>
It is expected that when I enter a letter for the first time, it will show the search help that does show if I delete and add the same letter again or enter two letters or more.