android - 从另一个类更新列表适配器

标签 android kotlin

我正在用 kotlin 开发我的第一个应用程序,我遇到了以下问题:

我的 Activity 中有一个“RecyclerView”,带有更新它的方法

class GroupsActivity : AppCompatActivity() {

val TAG = "GroupsActivity"


companion object {
    var active: Boolean = false

    var tableModel: List<GroupModel>? = null

}

fun updateList() {

    rv_list.adapter = GroupsListAdapter(this, tableModel)

}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_groups)

    if (WebSocketConnection.connected) {
        print(1)
    }

    rv_list.layoutManager = LinearLayoutManager(this)

    rv_list.hasFixedSize()

    rv_list.adapter = GroupsListAdapter(this, tableModel)


}
}

该列表将随时从另一个类异步更新。这是方法:

fun jsonActionCheck(action : String, jsonString: String){

    val gson = Gson()

    when (action){
        "LOGIN_OK" -> {}
        "LOGOUT" -> {}
        "GET_GROUPS" -> {

            val jsonModel : JsonGroups = gson.fromJson(jsonString, JsonGroups::class.java)

            if(GroupsActivity.active){

                GroupsActivity.tableModel = jsonModel.data

                GroupsActivity.updateList()
            }
        }
        "GET_CHAT_LIST" -> {}
        "SEND_MESSAGE" -> {
            //var grp = model.data.get(0).group
            //var msg = model.data.get(0).message
        }
        "GET_MESSAGE" -> {}
        else -> {}
    }
}

我知道该方法在伴随对象之外不是静态的,但从内部我无法引用该列表。

最佳答案

界面

编写接口(interface)并在GroupsActivity实现 像这样的东西

/**
 * View Call Back interface for Activity
 */
interface ViewCallBackOperations : BaseViewOpration {

    fun onDataReceived(randomDialog: List<MovieModel>)

    fun onError(error: String)
}

在 Activity 实现接口(interface)并覆盖回调方法,类似这样

class PopularFragment : Activity(), PopularMVPContract.ViewCallBackOperations,

重写一个接口(interface)的方法,当我为我的应用程序从 Internet 从 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 - 这是什么?

这不过是 Activity 的弱引用对象,使用构造函数初始化,类似这样

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()
}

关于android - 从另一个类更新列表适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50368527/

相关文章:

android - 为什么使用WorkManager的OneTimeWorkRequest的setInitialDelay()函数,改变设备时间时延迟不生效

java - Kotlin 访问 Java 类

android - 如何在 Android Jetpack Compose 中禁用可组合预览?

java - "Realtime"中多用户编辑的软件设计模式

android - 错误 :Lambda coming from jar file need their interfaces on the classpath to be compiled RxJava2

android - 如何在 Android 布局中定义所有子项的文本颜色?

kotlin - 异步构造生产者

kotlin - Kotlin channel 满时执行一段代码

Android相对布局重力填充问题

java - 如何覆盖java类中的单个方法