Адаптер не сразу отображается в соответствии с значением аргумента, а только после второго захода во фрагмент

У меня проблема. Приложение с "карточками" по английскому, в котором сверху слово, а если кликнуть карточку то появляется перевод снизу (становится VISIBLE). Есть переменная в Datastore - "TranslationDirection", которая определяет, на каком языке слово сверху, а на каком - снизу.

Все работает хорошо, НО - только НЕ при первом открытии. Если я первоначально открываю приложение, то сверху всегда будет слово на английском (дефолтное значение translationDirection), даже если в Datastore стоит русско-английский перевод. Если после этого я открою любой другой фрагмент, а потом вернусь на основной с карточками - тогда уже направление перевода правильное.

Не могу найти причину, буду благодарен если сможете подсказать.

Спасибо.

In Adapter:

public void onBindViewHolder(@NonNull JavaDrillerAdapter.JavaDrillerViewHolder holder, int position) {
    Word currentWord = getItem(position);

    if (!nativToForeign) {
        holder.tvUpper.setText(currentWord.getForeign());
        holder.tvDowner.setText(currentWord.getRus());
    } else if (nativToForeign) {
        holder.tvUpper.setText(currentWord.getRus());
        holder.tvDowner.setText(currentWord.getForeign());
    }
    holder.tvDowner.setVisibility(View.INVISIBLE);
}

Dao method:

@Query("SELECT * FROM word_table WHERE category IN (SELECT categoryNumber FROM category_table WHERE categoryShown = 1) AND shown = 1 ORDER BY RANDOM() LIMIT 4")
fun get4wordsRx(): Single<List<Word>>

In ViewModel:

) : ViewModel() {
var mList = ArrayList<Word>()
val mLivedataList = MutableLiveData<List<Word>>()
val m4words = wordDao.get4wordsRx()

private val transDirFlow = preferencesManager.translationDirectionFlow
val readTransDir = transDirFlow.asLiveData() // добавил эти две строки

fun getLivedataList(): LiveData<List<Word>> {
    return mLivedataList
}

fun get4words() {
    m4words.subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(object :
            SingleObserver<List<Word>> { // почитать почему тута object:-ом заменен джавный new
            override fun onSubscribe(d: Disposable) {
                composite.add(d)
            }

            override fun onSuccess(t: List<Word>) {
                mList.addAll(t)
                mLivedataList.value = mList
            }

            override fun onError(e: Throwable) {
                // empty
            }
        })
}

InFragment:

class DrillerFragment : Fragment(R.layout.cardstack_layout), CardStackListener {

    private val viewModel: DrillerViewModel by viewModels()
    private lateinit var drillerAdapter: JavaDrillerAdapter/*? = null*/

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        val binding = CardstackLayoutBinding.bind(view)
        drillerAdapter = JavaDrillerAdapter(JavaDrillerAdapter.JavaDrillerDiff(), false, requireContext()

        viewModel.getLivedataList().observe(viewLifecycleOwner) {
            drillerAdapter.submitList(it)
        }
        binding.apply {
            cardStackView.apply {
                viewModel.readTransDir.observe(viewLifecycleOwner) {
                    drillerAdapter.setNativToForeign(it)
                }
                adapter = drillerAdapter
                layoutManager = drillerLayoutManager
                setHasFixedSize(true)
            }
        }
        viewModel.get4words()
    }
    //other methods

In Datastore (in case it's needed):

val translationDirectionFlow = dataStore.data
    .catch { exception ->
        if (exception is IOException) {
            Log.e(TAG, "Error reading preferences", exception)
            emit(emptyPreferences())
        } else {
            throw exception
        }
    }
    .map { preferences ->
        val nativToForeign = preferences[PreferencesKeys.NATIV_TO_FOREIGN] ?: false
        Log.d(TAG, "So, trans nativeTOForeign: " + nativToForeign)
        nativToForeign
    }

Ответы (0 шт):