AsyncTaskLoader возвращает старые значения вместо новых
У меня есть следующая проблема. Мое приложение содержит два фрагмента (FragmentA, FragmentB), размещенных в одном действии. Я пытаюсь получить данные из URL-адреса и отобразить их во фрагменте A в окне повторного использования. Я также реализовал AsyntaskLoader во FragmentA для извлечения данных из URL
Проблема в том, что я пытаюсь реализовать кнопку обновления, которая будет загружать новые данные из URL, но она всегда возвращает данные, которые уже были загружены. Данные обновляются только тогда, когда я перехожу к фрагменту B а затем обратно к фрагменту A.
ЭТО МОЙ ПОГРУЗЧИК
Класс EventLoader(context: Context, приватный val url: String?, приватный val httpRequestBuilder: HttpRequestBuilder): AsyncTaskLoader> (context) {
override fun loadInBackground(): ArrayList<Event>? {
return url?.let { httpRequestBuilder.fetchCountlyData(it) }
}
override fun onStartLoading() {
forceLoad()
}
}
ЭТО МОЙ ФРАГМЕНТ
class EventFragment : Fragment(), LoaderManager.LoaderCallbacks<ArrayList<Event>> {
private lateinit var recyclerView: RecyclerView
private lateinit var viewAdapter: RecyclerView.Adapter<*>
private var viewManager = LinearLayoutManager(activity)
private lateinit var stateText: TextView
private lateinit var loadingIndicator: ProgressBar
private lateinit var refreshIcon: ImageButton
private var initList = arrayListOf<Event>()
private val url = "https://appanalytics-test.wirecard.com/o?method=user_details&uid=b37ed2fcb1647fd94fa3a835b9c34ed0c52c7438&api_key=15fc695e630e404206b5ce7db37d3029&app_id=5b153d2d0b2f2605440f8a5f"
private val httpRequestBuilder = HttpRequestBuilder()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_event, container, false)
refreshIcon = activity!!.findViewById(R.id.refresh_toolbar_button)
stateText = view.findViewById(R.id.empty_view)
viewAdapter = ItemAdapter(initList, activity!!.baseContext)
loadingIndicator = view.findViewById(R.id.loading_indicator)
val connectManager = activity!!.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkInfo = connectManager.activeNetworkInfo
if (networkInfo != null && networkInfo.isConnected) {
loaderManager.initLoader(1, null, this as LoaderManager.LoaderCallbacks<ArrayList<Event>>)
} else {
loadingIndicator.visibility = View.GONE
stateText.text = getString(R.string.no_internet)
}
refreshIcon.setOnClickListener {
loaderManager.restartLoader(1, null, this as LoaderManager.LoaderCallbacks<ArrayList<Event>>)
}
implementRecyclerView(view)
return view
}
override fun onCreateLoader(id: Int, args: Bundle?): Loader<ArrayList<Event>> {
initList.clear()
viewAdapter.notifyDataSetChanged()
loadingIndicator.visibility = View.VISIBLE
stateText.visibility = View.GONE
return EventLoader(context!!, url, httpRequestBuilder)
}
override fun onLoadFinished(loader: Loader<ArrayList<Event>>, events: ArrayList<Event>?) {
stateText.text = getString(R.string.empty_list)
loadingIndicator.visibility = View.GONE
if (events != null && !events.isEmpty()) {
initList.addAll(events)
viewAdapter.notifyDataSetChanged()
stateText.visibility = View.GONE
} else {
stateText.visibility = View.VISIBLE
}
}
override fun onLoaderReset(loader: Loader<ArrayList<Event>>) {
}
private fun implementRecyclerView(view: View) {
recyclerView = view.findViewById<RecyclerView>(R.id.recycler_view).apply {
layoutManager = viewManager
adapter = viewAdapter
}
}
}