(sorry for my english)
I have fragment where I have an AutocompleteTextView and ArrayAdapter for it.
ArrayAdapter get values from resource strings.
When fragment creating first time — everything is ok, but when I go to fragment back (with backstack or replace with saved fragment) my AutocompleteTextView show only 1 item but ArrayAdapter size is 6. I really don't know why is that...
I was thinking if I save ArrayAdapter at viewmodel it will work, but no.
I want to see my items after I back to fragment
SomeFragment.kt (all names changed):
class SomeFragment : Fragment() {
private val mSomeViewModel = SomeViewModel()
private lateinit var mSomeAutoCompleteTextView: AutoCompleteTextView
private lateinit var mSomeStrings: Array<String>
private lateinit var mSomeArrayAdapter: ArrayAdapter<String>
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?,
): View? {
mSomeStrings = resources.getStringArray(R.array.strings_array)
mSomeArrayAdapter = ArrayAdapter(requireContext(), R.layout.dropdown_item, mSomeStrings)
return inflater.inflate(R.layout.fragment_order_server, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
view.apply {
mSomeAutoCompleteTextView = findViewById(R.id.someAutoCompleteTextView)
}
mSomeAutoCompleteTextView.apply {
setText(mSomeStrings[mSomeViewModel.positionId])
/* when breakpoint here and check mSomeArrayAdapter.count there are 6 items, but app show only one */
setAdapter(mSomeArrayAdapter)
setOnItemClickListener { _, _, position, _ ->
mSomeViewModel.someFunction(position)
}
}
}
}
SomeViewModel.kt (all names changed):
class SomeViewModel : ViewModel() {
val positionId: Int
get() = mPositionId
fun someFunction(position: Int) {
mPositionId = position
/* some other code */
}
}
Okay, I just found a solution. My mistake was that I use standard
ArrayAdapterinstead of my own (or it's becauseArrayAdapterhas something bad). I created customBaseAdapterwithFilterableand it's work.Code if someone needed: