RecyclerView всегда пусто после возвращения из другого фрагмента? - PullRequest
0 голосов
/ 14 февраля 2019

Я установил определенное условие о том, когда извлекать данные из Интернета, если последний раз извлекал данные более 10 минут назад, а затем извлекал данные из Интернета, поэтому мне не нужно извлекать данные снова и сновакогда возвращаешься из другого фрагмента.Я написал этот код в onResume,

Я предполагаю, что данные продукта все еще будут на моем RecyclerView после возврата из другого фрагмента.

Если последняя загрузка данных занимает более 10 минутназад, тогда я могу заполнить представление RecyclerView с данными продукта, как это: -

enter image description here

Но проблема в том, когда я перехожу из дома фрагмент на другойфрагмент, например, если нажать на другую вкладку в нижнем меню навигации, RecyclerView кажется пустым, это просто текстовое представление, которое появляется на экране следующим образом.(Если я снова вернусь к исходному фрагменту, это означает, что в последний раз я получаю данные о продукте с сервера не более 10 минут назад)

enter image description here

панель инструментов и нижняя навигация являются частью моего основного действия, поэтому я изменяю фрагмент в центральной части

- это моя проблема, потому что onDestroy и onDetach моего HomeFragment активируются при изменениик другому фрагменту?

что здесь не так?вот упрощенный код моего домашнего фрагмента

class HomeFragment : androidx.fragment.app.Fragment() {

    lateinit var mContext : Context
    lateinit var mActivity : FragmentActivity

    lateinit var recyclerView1 : RecyclerView
    lateinit var fragmentView : View

    private var firstProducts = listOf<Product>()
    lateinit var firstProductAdapter : ProductListAdapter

    override fun onAttach(context: Context) {
        super.onAttach(context)

        mContext = context
        activity?.let { mActivity = it }

    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

        // set up view
        fragmentView = inflater.inflate(R.layout.fragment_home, container, false)
        recyclerView1 = fragmentView.findViewById(R.id.recyclerView_1)


        return fragmentView
    }

    override fun onResume() {
        super.onResume()

        if (lastTimeFetchDataIsMoreThan10MinutesAgo) {
            getProducts()  // when I open the app for the very first time, I fetch the product data
        } else {

           // when it is more than 10 minutes, do nothing

        }


    }

    override fun onStop() {
        super.onStop()

        progressBar.visibility = View.INVISIBLE // to ensure the progress bar will always dissapear if move to another destination

    }

    private fun getProducts(type: String) {

        showProgressBar(true)

        Product.getProductsFromServer(customerID = userData.id.toString(), type = type) { errorMessage, products ->

            errorMessage?.let {
                activity?.toast(it)
            } ?: run {

                val productList = products ?: ArrayList()
                setUpRecyclerView(type = type,products = productList)

            }

        }

        showProgressBar(false)

    }

    private fun setUpRecyclerView(type: String, products: List<Product>) {
        val productAdapter = ProductListAdapter(context = mContext,products = products)
        val layoutManager = LinearLayoutManager(mContext,LinearLayoutManager.HORIZONTAL,false)


        if (type == "special") {
            firstProductAdapter = productAdapter
            firstProducts = products
            recyclerView1.adapter = productAdapter
            recyclerView1.layoutManager = layoutManager
            recyclerView1.setHasFixedSize(true)

        } 

    }

    private fun showProgressBar(enable: Boolean) {

        if (enable) {
            progressBar.visibility = View.VISIBLE
            recyclerView1.visibility = View.GONE
            selectedProductTextView.visibility = View.GONE
            bestSellingProductTextView.visibility = View.GONE

        } else {
            progressBar.visibility = View.GONE
            recyclerView1.visibility = View.VISIBLE
            selectedProductTextView.visibility = View.VISIBLE
            bestSellingProductTextView.visibility = View.VISIBLE


        }

    }


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...