Прежде всего:
Я хотел бы передать данные из моего RecyclerAdapter в мой фрагмент, поэтому я реализовал этот адаптер ниже:
class RecyclerItemCart(private val cart: MutableList<Post>, val context: Context, val listener: (Post) -> Unit) : RecyclerView.Adapter<RecyclerItemCart.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.cart_item, parent, false)
return ViewHolder(view)
}
interface OnItemClickListener {
fun onItemClickListener(post: Post)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(cart[position], listener)
holder.mView.setOnLongClickListener {
true }
}
override fun getItemCount(): Int {
return cart.size
}
inner class ViewHolder (val mView: View) : RecyclerView.ViewHolder(mView) {
fun bind(mItem: Post, listener: (Post) -> Unit) = with(itemView)
{
val title: TextView = mView.findViewById(R.id.title)
val authorName: TextView = mView.findViewById<TextView>(R.id.owner)
val priceIT: TextView = mView.findViewById(R.id.priceIncT)
val priceExcT: TextView = mView.findViewById(R.id.priceExcT)
val pic: ImageView = mView.findViewById(R.id.pic)
title.text = mItem.title
authorName.text = mItem.authorName
priceIT.text = mItem.priceIT
priceExcT.text = mItem.priceExcT
// Glide.with(context).load(mItem.url).into(pic)
setOnLongClickListener { listener(mItem)
true }
}
}
}
затем я устанавливаю onLongClickListener в своем фрагменте (версия 1):
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val v = inflater.inflate(R.layout.cart_fragment, container, false)
activity = getActivity() as MainActivity
recyclerView = v.findViewById(R.id.recylerItemCart)
totalAmountView = v.findViewById(R.id.total_amount)
activity.toolbarTitle.text = resources.getString(R.string.cart)
RequestGetCart.MakeRequestTask(this, activity).execute(activity.user.token)
v.findViewById<Button>(R.id.checkout).setOnClickListener(this)
recyclerView.setOnLongClickListener {
recyclerView.adapter = RecyclerItemCart(cart.elements, activity){
RequestRemoveItemCart.MakeRequestTask(this, activity).execute(activity.user.token, it.id, "1")
}
AlertDialog.Builder(activity)
.setTitle("REMOVE ITEM")
.setMessage(context!!.resources.getString(R.string.removeItemCart))
.setPositiveButton(android.R.string.yes, DialogInterface.OnClickListener { dialog, which ->
recyclerView.adapter = RecyclerItemCart(cart.elements, activity){
RequestRemoveItemCart.MakeRequestTask(this, activity).execute(activity.user.token, it.id, "1")
}
})
.setNegativeButton(android.R.string.no, null)
.setIcon(android.R.drawable.ic_dialog_alert)
.show()
true}
return v
}
но когда я пытаюсь долго кликать, ничего не происходит. Он никогда не входит в слушателя.
Поэтому я попытался немного изменить:
recyclerView.setOnLongClickListener(View.OnLongClickListener {
true
}) {
recyclerView.adapter = RecyclerItemCart(cart.elements, activity){
RequestRemoveItemCart.MakeRequestTask(this, activity).execute(activity.user.token, it.id, "1")
}
AlertDialog.Builder(activity)
.setTitle("REMOVE ITEM")
.setMessage(context!!.resources.getString(R.string.removeItemCart))
.setPositiveButton(android.R.string.yes, DialogInterface.OnClickListener { dialog, which ->
recyclerView.adapter = RecyclerItemCart(cart.elements, activity){
RequestRemoveItemCart.MakeRequestTask(this, activity).execute(activity.user.token, it.id, "1")
}
})
.setNegativeButton(android.R.string.no, null)
.setIcon(android.R.drawable.ic_dialog_alert)
.show()
true}
Но у меня возникает ошибка при использовании
recyclerView.setOnLongClickListener(View.OnLongClickListener {
true
})
он говорит, что я не передаю хорошие аргументы, но я передаю View.onLongClickListener в соответствии с запросом.
Если у вас есть идеи об этом setOnLongClickListener или другом способе обработки longClick и передачи данных из Recycler во фрагмент.
Единственное условие: я хочу сделать что-то из моего фрагмента, а не из моего переработчика.
Так, например, я могу поймать onLongClick из Adapter и вызвать обратный вызов, чтобы вернуться к фрагменту, но я не знаю, как это сделать.