Android RecyclerПросмотреть навигацию в адаптере - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь перейти к фрагменту в адаптере RecyclerView, причина в том, что у меня есть список элементов с кнопками с различным текстом и при нажатии на каждую кнопку в зависимости от текста на кнопке, я хочу, чтобы перейти кразличные фрагменты, которые соответствуют этому тексту.Каков наилучший способ справиться с этой навигацией?

     class DummyAdapter(val context: Context, private var DummyList: ArrayList<DummyModel>) :
        RecyclerView.Adapter<DummyAdapter.DummyViewHolder>() {

        override fun onCreateViewHolder(parent: ViewGroup, p1: Int): DummyViewHolder {
            val dummyBinding: ListItemDummyBinding = DataBindingUtil.inflate(
                LayoutInflater.from(parent.context),
                R.layout.list_item_dummy,
                parent,
                false
            )
            return DummyViewHolder(dummyBinding)
        }

        override fun getItemCount(): Int {
            return dummyList.size
        }

        override fun onBindViewHolder(holder: DummyViewHolder, position: Int) {
            val item = dummyList[position]
            holder.bind(item)

            holder.dummyItemBinding.buttonDummy.setOnClickListener {
                if (holder.dummyItemBinding.buttonDummy.text == "Fragment 1") {

                    //The actual Navigation Logic to be added
                }
            }
            holder.dummyItemBinding.buttonDummy.setOnClickListener {
                if (holder.dummyItemBinding.buttonDummy.text == "Fragment 2") {

                    //The actual Navigation Logic to be added
                }

            }
        }

            inner class DummyViewHolder(var dummyItemBinding: ListItemDummyBinding) :
                RecyclerView.ViewHolder(dummyItemBinding.root) {
                private lateinit var dummyItem: DummyModel
                fun bind(dummyItem: DummyModel) {
                    this.dummyItem = dummyItem
                    dummyItemBinding.buttonDummy.text = dummyItem.button_text
                }
            }
   }

1 Ответ

0 голосов
/ 08 февраля 2019

Вы можете сделать это следующим образом:

Передать обратный вызов адаптеру

class DummyAdapter(
    val context: Context, 
    private var DummyList: ArrayList<DummyModel>,
    private val onButtonClickedListener: (buttonText: String) -> Unit
): RecyclerView.Adapter<DummyAdapter.DummyViewHolder>() {
// ...
override fun onBindViewHolder(holder: DummyViewHolder, position: Int) {
    val item = dummyList[position]
    holder.bind(item)
    holder.dummyItemBinding.buttonDummy.setOnClickListener {
        val buttonText = holder.dummyItemBinding.buttonDummy.text
        onButtonClickedListener(buttonText)
    }
}

А когда вы создадите адаптер, поместите ссылку на функцию:

val adapter = DummyAdapter(context, dummyList, ::onDummyItemClicked)

fun onDummyItemClicked(buttonText: String) {
    when(buttonText) {
        "Fragment 1" -> goToFragment1()
        "Fragment 2" -> goToFragment2()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...