Reputation: 743
I try get data from internet, after done i update my Recyclerview
, but it never show. Method onDone()
Toast size of result
, it's not empty.
My code:
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)
}
}
}
But i move method configRecyclerView()
to onDone()
, it show on:
override fun onDone(result: NewFeedCollection) {
searchResult = result.post
Toast.makeText(requireContext(), "${searchResult.size}", Toast.LENGTH_SHORT).show()
configRecyclerView()
recyclerViewAdapter.notifyDataSetChanged()
}
Upvotes: 0
Views: 42
Reputation: 721
in fun onDone
you are reassigning the result: searchResult = result.post
Instead of that you have to update the list's reference you've passed to the adapter initially. That means you need to change the code:
from:
searchResult = result.post
to
searchResult.clear();
searchResult.addAll(result.post);
Upvotes: 1