【发布时间】:2021-02-16 20:44:48
【问题描述】:
我有一种情况,我需要将一个列表从适配器传递到活动,然后将同一个列表从活动传递到另一个适配器。所以,我将一个列表从适配器传递给这样的活动,它可以工作。
if(filteredList.isNotEmpty()){
var json = Gson().toJson(filteredList)
intentPassList.putExtra("filteredList", json)
LocalBroadcastManager.getInstance(holder.context).sendBroadcast(intentPassList)
}
接下来,我在活动课上像这样成功收到了我的清单
private val receiverFilteredList = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
var recList = intent.getStringExtra("filteredList")
if (recList != null){
var token: TypeToken<ArrayList<Model?>?> = object : TypeToken<ArrayList<Model?>?>() {}
myFilteredList = Gson().fromJson(recList, token.type) // list is received correctly
}
}
}
现在我需要将此接收到的列表传递给另一个适配器(回收器视图),我的想法是在我的活动中的 onCreate 中执行此操作
private var myFilteredList: ArrayList<Model> = arrayListOf()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
LocalBroadcastManager.getInstance(this).registerReceiver(receiverFilteredList, IntentFilter("filteredList"))
if (myFilteredList?.isNotEmpty() == true){
adapter = NewAdapter(myFilteredList!!)
myRecycler?.layoutManager = manager
myRecycler?.adapter = adapter
} else {
adapterInfo = NewAdapter(completeList)
myRecycler?.layoutManager = manager
myRecycler?.adapter = adapter
}
}
}
但它总是将 completeList 发送到适配器,因为 myFilteredList 为空。如何正确地将接收器中收到的列表传递给 onCreate 中的 myFilteredList?
新适配器类
class NewAdapter(var itemList: ArrayList<Model>) :
RecyclerView.Adapter<NewAdapter.ViewHolder>() {
private lateinit var getContext: Context
class ViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
var x: TextView = view.txtX
val y: TextView = view.txtY
val z: TextView = view.txtZ
val localPreferances = PreferencesManager()
val context: Context = view.context
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
getContext = parent.context
val layoutView = LayoutInflater.from(parent.context).inflate(R.layout.listview_item_list_layout, parent, false)
return ViewHolder(layoutView)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
var receivedList = itemList[position]
if (receivedList?.dataA != null) {
holder.y?.text = "${receivedList?.dataA}"
} else holder.y?.text = ""
if (receivedList?.dataB != null) {
holder.x?.text = "${receivedList?.dataB}"
} else holder.x?.text = ""
if (receivedList?.dataC != null) {
holder.z?.text = "${receivedList?.dataC}"
} else holder.z?.text = ""
}
override fun getItemCount() = itemList.size
}
【问题讨论】:
-
能否请您也发布您的适配器类实现?
-
我已经添加了我的适配器类。我需要从 Activity 的 onCreate 传递这个列表,因为如果我不这样做,我会得到布局跳过错误,并且它什么也不显示。所以想法是在活动类内的广播接收器中接收列表,而不是将其传递给同一个类中的 Oncreate,并从那里通过 if 语句控制将哪个列表传递给 NewAdapter。但我无法在 onCreate 中填写 myFIlteredList,这是我的问题。
标签: java android kotlin android-recyclerview broadcastreceiver