android - RecyclerView 从不显示
问题描述
我尝试从互联网获取数据,完成后我更新了我的Recyclerview
,但它从未显示。方法onDone()
Toast size of 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()
}
解决方案
在fun onDone
您重新分配结果 searchResult = result.post
时:您必须更新您最初传递给适配器的列表引用。这意味着您需要更改代码:来自:
searchResult = result.post
至
searchResult.clear();
searchResult.addAll(result.post);
推荐阅读
- c - c中带有char指针的二维数组
- bash - 在mac终端中bash osascript(AppleScript),顺序运行多个命令
- javascript - abnormal behavior javascript select alert
- jsf - 如果 primefaces 对话框通过“X”关闭按钮关闭,则清除表单或调用方法
- java - How to do toast queue?
- dart - 在 Flutter 中检索图像路由
- c++ - Convert from char array to string variable
- oracle - Changing the language of Oracle error messages in SQL Developer
- arrays - Perl: array of hashes
- google-sheets - Google表格数组公式如何指定要增加哪些列而不增加哪些列?