Интерфейс
Написать интерфейс и реализовать его в GroupsActivity
Как то так
/**
* View Call Back interface for Activity
*/
interface ViewCallBackOperations : BaseViewOpration {
fun onDataReceived(randomDialog: List<MovieModel>)
fun onError(error: String)
}
Реализован интерфейс в Activity и переопределить метод обратного вызова, что-то вроде этого
class PopularFragment : Activity(), PopularMVPContract.ViewCallBackOperations,
Метод переопределения для интерфейса, эти методы будут вызываться асинхронно из другого класса, когда я получаю данные из Интернета из Web API для моего приложения
override fun onDataReceived(randomDialog: List<MovieModel>) {
adapter!!.updateData(randomDialog)
}
override fun onError(error: String) {
this.showSnackBar("Oops !! Something went wrong please try again !!")
}
Другой класс
Это еще один класс, откуда эти методы называются
private fun handlePopularResponse(data: JSONObject?, error: String?) {
if (null == error && null != mViewCallBack) {
val gson = Gson()
val recentMoviesResponse: RecentAPIResponse = gson.fromJson(data.toString(), RecentAPIResponse::class.java)
mViewCallBack!!.get()!!.onDataReceived(recentMoviesResponse.data)
} else if (null != mViewCallBack){
mViewCallBack!!.get()!!.onError(error!!)
}
}
mViewCallBack - что это?
Это не что иное, как объект со слабой ссылкой, инициализированный с помощью конструктора, что-то вроде этого
private var mViewCallBack: WeakReference<PopularMVPContract.ViewCallBackOperations>? = null
init {
mViewCallBack = WeakReference(viewCallBackOperations)
}
Адаптер класса
Объявление объекта списка:
private var movieList: MutableList<MovieModel> = mutableListOf<MovieModel>()
Добавить метод в класс адаптера следующим образом
fun updateData(data: List<MovieModel>) {
movieList.clear()
movieList.addAll(data)
notifyDataSetChanged()
}