我正在用 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/