Kotlin:单击RecycleView项目时显示AlertDialog

问题描述 投票:0回答:1

现在,我正在研究单击RecyclerView项时显示AlertDialog。但是,我不知道如何为点击侦听器设置适配器。你能给我个小费吗?

首先,我试图将AlertDialog放入此主要活动中。这是正确的位置吗?

MainActivity

class MainActivity:AppCompatActivity(){

private val foodList = listOf(
    FoodModel("Noodle", 2500),
    FoodModel("Cake", 3000),
    FoodModel("Pizza", 4000),
    FoodModel("Stake", 5000),
    FoodModel("Chicken", 4000)
)

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


    val adapter = FoodDataAdapter(foodList)
    adapter.notifyDataSetChanged()
    foodListView.adapter = adapter
    foodListView.layoutManager = LinearLayoutManager(this)

    fun onItemClick(item: FoodModel, position: Int) {
        val dialog = AlertDialog.Builder(this)
        dialog.setTitle("Item deletion")
        dialog.setMessage("Do you want to delete this item?")
        dialog.setPositiveButton("Yes", DialogInterface.OnClickListener { _, _ ->
        })
        dialog.setNegativeButton("No", DialogInterface.OnClickListener { _, _ ->
        })
        dialog.setNeutralButton("Cancel", DialogInterface.OnClickListener { _, _ ->
        })
        dialog.show()
    }
}

}

This is the Adapter.

class FoodDataAdapter(val list:List):RecyclerView.Adapter(){重写onCreateViewHolder(parent:ViewGroup,viewType:Int)的乐趣:FoodDataViewHolder {val view = LayoutInflater.from(parent.context).inflate(R.layout.item_food,parent,false)返回FoodDataViewHolder(view)}

override fun getItemCount(): Int {
   return list.count()
}

override fun onBindViewHolder(holder: FoodDataViewHolder, position: Int) {
    holder.containerView.nameText.text=list[position].name
    holder.containerView.priceText.text="${list[position].price}원"
}

}


View holder

class FoodDataViewHolder(重写val containerView:View):RecyclerView.ViewHolder(containerView),LayoutContainer


kotlin android-recyclerview android-alertdialog recycler-adapter onitemclicklistener
1个回答
0
投票

我编辑了您的代码。 MainActivity:

class MainActivity : AppCompatActivity(), FoodDataAdapter.OnItemClickListener {

private val foodList = listOf(
    FoodModel("Noodle", 2500),
    FoodModel("Cake", 3000),
    FoodModel("Pizza", 4000),
    FoodModel("Stake", 5000),
    FoodModel("Chicken", 4000)
)
var adapter : FoodDataAdapter = null
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)


    adapter = FoodDataAdapter(foodList, this)
    foodListView.adapter = adapter
    foodListView.layoutManager = LinearLayoutManager(this)

}

override fun alertDialog(position: Int) {
    val dialog = AlertDialog.Builder(this)
    dialog.setTitle("Item deletion")
    dialog.setMessage("Do you want to delete this item?")
    dialog.setPositiveButton("Yes", DialogInterface.OnClickListener { _, _ -> 
    adapter.removeItem(position)
    })
    dialog.setNegativeButton("No", DialogInterface.OnClickListener { _, _ ->
    })
    dialog.setNeutralButton("Cancel", DialogInterface.OnClickListener { _, _ ->
    })
    dialog.show()
}
}

FoodDataAdapter:

class FoodDataAdapter(val list: List<FoodModel>, var listener : FoodDataAdapter.OnItemClickListener):RecyclerView.Adapter<FoodDataAdapter.FoodDataViewHolder>(){

interface OnItemClickListener {
    fun alertDialog(position : Int)
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FoodDataViewHolder {
    val view = LayoutInflater.from(parent.context).inflate(R.layout.item_food,parent,false)
    return FoodDataViewHolder(view)
}

override fun getItemCount(): Int {
    return list.count()
}

fun removeItem(position: Int) {
    list.remove(position)
    notifyItemRemoved(position)
}

override fun onBindViewHolder(holder: FoodDataViewHolder, position: Int) {
    holder.nameText.text=list[position].name
    holder.priceText.text="${list[position].price}원"
}

inner class FoodDataViewHolder(containerView: View) : RecyclerView.ViewHolder(containerView),
    View.OnClickListener {

    var nameText: TextView = containerView.findViewById(R.id.nameText)
    var priceText: TextView = containerView.findViewById(R.id.priceText)

    init {
        containerView.setOnClickListener(this)
    }

    override fun onClick(v: View?) {
        listener.alertDialog(adapterPosition)
    }
}
}
© www.soinside.com 2019 - 2024. All rights reserved.