После смены ориентации экрана в логи данные приходят, а на экране пусто?
Во фрагменте используется viewager в который добавлен фрагмент "A", в котором есть listView, он заполняется данными, при ротации экрана, он становится пустым, хотя данные приходят, адаптер обновляю.
В каждом из методов я в логи вывожу инфу о завершении метода, все методы отрабатывают от прикрепления, до уничтожения фрагмента, все данные приходят, а экран пустой.
Денис Загаевский, Вот код, я весь день проверяю, все методы отрабатывают тогда, когда нужно, но после смены ориентации экрана данные перестают обновляться, хотя в логи приходят, еще раз ориентацию экрана меняю, на экране появляются изменения, которые вносились до смены ориентации и снова перестает обновляться.
class SavedRepoFragment : BaseFragment<FragmentSavedRepoBinding>(),ISavedRepoFragment {
companion object{
const val SAVED_ARRAY = "saved_array"
}
private var adapter:ArrayAdapter<String>?=null
private var arrayList:ArrayList<String> = ArrayList()
private var presenter:SavedRepoPresenter?=null
override val bindingInflater: (LayoutInflater, ViewGroup?, Boolean) -> FragmentSavedRepoBinding
get() = FragmentSavedRepoBinding::inflate
override fun setupViews() {
presenter = SavedRepoPresenter(this)
presenter?.initArgs(requireContext())
adapter = ArrayAdapter(requireContext(), android.R.layout.simple_list_item_1, arrayList)
creatingListView(adapter!!, arrayList)
creatingSearchView(adapter!!,arrayList)
val login = presenter?.getCurrentLogin(requireActivity())
presenter?.observeSavedRepos(login, adapter!!, arrayList)
}
private fun creatingSearchView(adapter: ArrayAdapter<String>,arrayList: ArrayList<String>) {
val searchView = binding.searchView
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
searchView.clearFocus()
if (arrayList.contains(query)) {
adapter.filter.filter(query)
}
return false
}
override fun onQueryTextChange(newText: String?): Boolean {
adapter.filter.filter(newText)
return false
}
})
}
private fun creatingListView(adapter: ArrayAdapter<String>,arrayList: ArrayList<String>) {
val listView = binding.listView
listView.adapter = adapter
listView.setOnItemLongClickListener { parent, view, position, id ->
val dialogBuilder = AlertDialog.Builder(requireContext())
dialogBuilder.setMessage("Удалить этот репозиторий?")
dialogBuilder.setNegativeButton(
"Нет",
DialogInterface.OnClickListener { dialog, which -> })
dialogBuilder.setPositiveButton("Да", DialogInterface.OnClickListener { dialog, which ->
val repoName = arrayList[position]
presenter?.removeRepo(repoName,adapter)
})
dialogBuilder.create()
dialogBuilder.show()
true
}
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
if (arrayList.isNotEmpty()) {
menu.add(0,2,0, R.string.remove_all)
}
}
override fun onPrepareOptionsMenu(menu: Menu) {
super.onPrepareOptionsMenu(menu)
if (arrayList.isEmpty()){
menu.removeItem(2)
}
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when(item.itemId){
2 -> presenter?.removeAllRepos()
}
return super.onOptionsItemSelected(item)
}
override fun onSaveInstanceState(outState: Bundle) {
outState.putStringArrayList(SAVED_ARRAY,arrayList)
super.onSaveInstanceState(outState)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val arr = savedInstanceState?.getStringArrayList(SAVED_ARRAY)
arr?.let { arrayList.addAll(it) }
}
override fun showMessage(message: String) {
Toast.makeText(requireContext(),message,Toast.LENGTH_SHORT).show()
}
}