Установить OnClickListener для кнопки в GroupAdapter - PullRequest
0 голосов
/ 28 сентября 2019

Я пытаюсь установить OnClickListener для кнопки внутри GroupAdapter RecyclerView

Мой код:

class settings : Fragment() {
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?, 
        savedInstanceState: Bundle?
    ): View? {
    super.onCreateView(inflater, container, savedInstanceState)
    val view = inflater.inflate(R.layout.fragment_settings, container, false)

    val adapter = GroupAdapter<ViewHolder>()
    adapter.add(SettingTitle("Permissions"))
    adapter.add(SettingCardCarInfo())

    //FAILED METHOD #1
    view.btn_update_settings.setOnClickListener {
        Log.d("tahoma","")
        Toast.makeText(activity, "Your settings were updated", Toast.LENGTH_SHORT).show()
    }

    //FAILED METHOD #2
    adapter.setOnItemClickListener { v, settings_end ->
        Log.d("tahoma",v.id.toString())
     }

    view.settingsRecycler.adapter = adapter

    return view
    }}

class SettingEnd : Item<ViewHolder>() {
    override fun getLayout(): Int {
        return R.layout.settings_end
    }

    override fun bind(viewHolder: ViewHolder, position: Int) {}

Что я пробовал:

1 - При простом вызове прослушивателя onclick на кнопке возникает ошибка с нулевым вызовом

2 - Использование адаптера прослушивателя onclick действительно перехватывало щелчки, но игнорировало любые щелчки на активируемых элементах (поэтомуне годится для кнопки)

3 - Выполнить то же самое, что и # 1, но с помощью метода «OnStart» - не сработало, так как «представление» не вызывалось внутри этого метода

4- Вызов слушателя onclick с помощью метода OnBind для держателя вида - он работал (я смог обнаружить нажатия кнопок), но не смог получить доступ к необходимым данным из других держателей вида в том же адаптере, которые содержат edittexts, к которым мне нужно добраться.

Любая помощь на этом этапе будет признательна, решения, написанные в синтаксисе Kotlin, будут отличными

1 Ответ

0 голосов
/ 29 сентября 2019

Используя RecyclerView, вам нужно настроить прослушиватель щелчков на представлении внутри адаптера следующим образом:

class GroupAdapter: RecyclerView.Adapter<ViewHolder>() {

    var onItemClick: (<Type Of Item>) -> Unit = {}

    fun createViewHolder(ViewGroup parent, int viewType): ViewHolder {
        return ViewHolder(<InflateViewHere>).apply {
            itemView.findViewById<Button>(R.id.button).setOnClickListener {
                onItemClick(getItem(adapterPosition))
            }
        }
    }
}

Затем в вашем фрагменте установите onItemClick для обработки при нажатии кнопки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...