![](/img/trans.png)
[英]How to send data from adapter to activity and display it in a recyclerview?
[英]Send data from RecyclerView Adapter to Activity on button click
我想要實現的是在單擊按鈕時將數據從自定義回收視圖適配器發送到活動。 更具體地說,我想發送一個 integer 值。
回收適配器代碼
class RecyclerAdapter(ingredientsList: MutableList<String>) : RecyclerView.Adapter<RecyclerAdapter.ViewHolder>()
{
private var ingredients : MutableList<String> = ingredientsList
private var testInt : Int = 0
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.lv_view_item,parent,false)
return ViewHolder(v,)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.pName.text = ingredients[position]
var ingrCount : TextView = holder.itemView.findViewById(R.id.ingredientCount)
var decrementIngr : Button = holder.itemView.findViewById(R.id.deleteIngeredient)
var incrementIngr : Button = holder.itemView.findViewById(R.id.addIngredient)
incrementIngr.setOnClickListener{
val count = Integer.parseInt(ingrCount.text.toString()) + 1
ingrCount.text = "$count"
testInt = count
Log.w("w", testInt.toString())
}
decrementIngr.setOnClickListener{
val count = Integer.parseInt(ingrCount.text.toString()) - 1
ingrCount.text = "$count"
testInt = count
Log.w("w", testInt.toString())
}
}
override fun getItemCount(): Int {
return ingredients.size
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
{
var pName : TextView = itemView.findViewById(R.id.ingredientName)
init {
itemView.setOnClickListener{
val position : Int = adapterPosition
}
}
}
}
在我的活動中,我想在單擊按鈕時獲取 testInt 變量。
btn_create_order.setOnClickListener{
//somehow get the data
}
謝謝
首先創建一個類似OnItemClickValue
的接口:
interface OnItemClickValue {
fun onValueChange(value: Int)
}
並通過 Adapter 並從 onClick 調用onValueChange()
方法:
class RecyclerAdapter(ingredientsList: MutableList<String>, val onItemClickValue:OnItemClickValue) : RecyclerView.Adapter<RecyclerAdapter.ViewHolder>()
{
private var ingredients : MutableList<String> = ingredientsList
private var testInt : Int = 0
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.lv_view_item,parent,false)
return ViewHolder(v,)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.pName.text = ingredients[position]
var ingrCount : TextView = holder.itemView.findViewById(R.id.ingredientCount)
var decrementIngr : Button = holder.itemView.findViewById(R.id.deleteIngeredient)
var incrementIngr : Button = holder.itemView.findViewById(R.id.addIngredient)
incrementIngr.setOnClickListener{
val count = Integer.parseInt(ingrCount.text.toString()) + 1
ingrCount.text = "$count"
testInt = count
onItemClickValue.onValueChange(testInt)
Log.w("w", testInt.toString())
}
decrementIngr.setOnClickListener{
val count = Integer.parseInt(ingrCount.text.toString()) - 1
ingrCount.text = "$count"
testInt = count
onItemClickValue.onValueChange(testInt)
Log.w("w", testInt.toString())
}
}
override fun getItemCount(): Int {
return ingredients.size
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
{
var pName : TextView = itemView.findViewById(R.id.ingredientName)
init {
itemView.setOnClickListener{
val position : Int = adapterPosition
}
}
}
}
在Activity上實現OnItemClickValue
接口:
class MainActivity: AppCompatActivity(), OnItemClickValue{
var testInt:Int = 0
override fun onValueChange(value: Int) {
testInt = value
}
btn_create_order.setOnClickListener{
//You will get testInt from here
Log.d("TAG", "testInt $testInt")
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.