代码之家  ›  专栏  ›  技术社区  ›  mducc

RecyclerView从不显示

  •  0
  • mducc  · 技术社区  · 7 年前

    我尝试从互联网获取数据,完成后我更新我的 Recyclerview 但它永远不会出现。方法 onDone() 烤面包的大小 result ,不是空的。

    我的代码:

    class SearchFragment : Fragment() {
    
        private lateinit var requestSearchPresenter: RequestSearchPresenter
        private lateinit var recyclerViewAdapter: RecyclerViewAdapter
        private var searchResult = ArrayList<ItemNewFeedCollection?>()
    
        private val onRequestSearchResult = object : OnRequestSearchResult {
            override fun onEmpty(result: ListNewFeedCollection) {
                recyclerViewAdapter.notifyDataSetChanged()
            }
    
            override fun onDone(result: ListNewFeedCollection) {
                searchResult = result.post
                Toast.makeText(requireContext(), "${searchResult.size}", Toast.LENGTH_SHORT).show()
                recyclerViewAdapter.notifyDataSetChanged()
            }
    
            override fun onFail(t: String) {
                recyclerViewAdapter.notifyDataSetChanged()
            }
        }
    
        private var recyclerViewItemClickListener = object : OnRecyclerViewItemClickListener {
            override fun onItemClick(view: View, postion: Int) {
                (requireActivity() as NewFeedActivity).apply {
                    val post = searchResult
                    if (post[postion]!!.date == "null" && post[postion]!!.date == post[postion]!!.description &&
                        post[postion]!!.date == post[postion]!!.full_post && post[postion]!!.date == post[postion]!!.image &&
                        post[postion]!!.date == post[postion]!!.full_post
                    ) {
                    } else {
                        val link = post[postion]!!.link
                        val source = post[postion]!!.source
                        val intent = Intent(requireContext(), PostActivity::class.java)
                        intent.putExtra("link", link)
                        intent.putExtra("source", source)
                        startActivity(intent)
                    }
                }
            }
    
            override fun onLongItemClick(view: View, postion: Int) {
            }
        }
    
        override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
            // Inflate the layout for this fragment
            return inflater.inflate(R.layout.fragment_search, container, false)
        }
    
        private fun configRecyclerView() {
            recyclerViewAdapter = RecyclerViewAdapter(requireContext(), searchResult, recyclerViewItemClickListener)
    
            recycler_view.layoutManager = LinearLayoutManager(requireContext())
            recycler_view.adapter = recyclerViewAdapter
        }
    
        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
            configRecyclerView()
    
            val keyWord = arguments?.getString("key_word")
    
            keyWord?.let {
                requestSearchPresenter = RequestSearchPresenter(onRequestSearchResult)
                requestSearchPresenter.search(it)
            }
        }
    }
    

    但我移动方法 configRecyclerView() ONDONE() 它显示:

    override fun onDone(result: NewFeedCollection) {
            searchResult = result.post
            Toast.makeText(requireContext(), "${searchResult.size}", Toast.LENGTH_SHORT).show()
    
            configRecyclerView()
    
            recyclerViewAdapter.notifyDataSetChanged()
        }
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Borislav Kamenov    7 年前

    在里面 fun onDone 您正在重新分配结果: searchResult = result.post 而不是你 必须更新最初传递给适配器的列表引用 . 这意味着您需要更改代码: 来自:

    searchResult = result.post
    

    searchResult.clear();
    searchResult.addAll(result.post);