Инициализация SwipeStack в приложении Android с данными из Cloud Firestore - PullRequest
1 голос
/ 02 августа 2020

Я новичок в Android (у меня есть некоторый опыт работы с Java Spring), и у меня проблема с заполнением 'link.fls.swipestack.SwipeStack' представления с помощью данные, полученные из базы данных Google Firestore. Фрагмент со SwipeStack запускается до получения списка с данными из базы данных. Таким образом, список не может быть вовремя передан адаптеру SwipeStack. Как решить эту проблему?

class MyViewModel(private val repository: Repository) : ViewModel() {

    var wordsListLiveData: MutableLiveData<List<WordPresentation>> = MutableLiveData()

    fun getWordsList(): LiveData<List<WordPresentation>> {
        val collectionReference = repository.getCollectionReference()

        collectionReference.get().addOnCompleteListener {
            val wordsList = it.result!!.toObjects(WordPresentation::class.java)
            wordsListLiveData.value = wordsList

        return wordsListLiveData
    }
}
class MyFragment : Fragment() {

    private val viewModel by inject<MyViewModel>()

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val adapter = MySwipeStackAdapter()
        adapter.setListener(this)
        viewModel.getWordsList().observe(viewLifecycleOwner, Observer {
            adapter.setDataList(it)
        })

        val binding = FragmentMyBinding.inflate(inflater)
        binding.lifecycleOwner = this
        binding.swipeStack.adapter = adapter
        binding.viewModel = viewModel
        return binding.root
    }

}
class MySwipeStackAdapter : BaseAdapter() {
   
    private lateinit var wordsList: List<WordPresentation>

    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
         // here I create ViewHolders with the data from the 'wordsList'
    }

    fun setDataList(list: List<WordDePresentation>) {
        wordsList = list
    }

}
...