Как установить перехватчик для RecyclerView адаптера?

голоса
0

На моем MainActivityесть Buttonи RecyclerViewс адаптером для CheckedTextView.

Я хочу , чтобы включить , Buttonкогда есть щелчок на CheckedTextView.

Я был в состоянии достигнуть его настройки Buttonконтекста , staticно это не хорошо (утечка памяти и т.д.)

Я попытался получить кнопку от contextи включения его в simpleCheckedTextView.setOnClickListener:

class AndroidDeviceAdapter(internal var context: Context, private val devices: Array<String>) :
    RecyclerView.Adapter<AndroidDeviceAdapter.MyViewHolder>() {

    inner class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        ...
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        ...
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        ...

        holder.simpleCheckedTextView.setOnClickListener {

        // Getting exception
        (context as Activity).findViewById<Button>(order_button).isEnabled = true
        }
    }

Что такое лучший способ сделать активен Button? Можно ли установить прослушиватель RecyclerView?

Задан 07/11/2018 в 20:03
источник пользователем
На других языках...                            


3 ответов

голоса
1

Да, это возможно. Вы можете создать пользовательский интерфейс, как это:

public interface RecyclerViewClickListener {
    void recyclerViewItemClicked(View view, int position);
}

и внутри адаптера:

class AndroidDeviceAdapter(internal var context: Context, private val devices: Array<String>) :
    RecyclerView.Adapter<AndroidDeviceAdapter.MyViewHolder>() {

   ...
   private RecyclerViewClickListener recyclerViewClickListener;
   ...

   public void setRecyclerViewClickListener(RecyclerViewClickListener recyclerViewClickListener)
   {
   this.recyclerViewClickListener=recyclerViewClickListener;
   }
   ...

А затем добавить нажмёй слушатель:

 holder.simpleCheckedTextView.setOnClickListener {

        recyclerViewClickListener.recyclerViewItemClicked(holder.simpleCheckedTextView, getAdapterPosition());
        }

А затем прикрепить слушатель в деятельности, где вы хотите, чтобы выполнить нужное действие.

Некоторые из моих сниппетов в Java стиле. где-то в сочетании с кодом Котлин. Не забывайте, пожалуйста, сортировать и адаптировать его к Котлин. Хорошее кодирование

Ответил 07/11/2018 в 20:16
источник пользователем

голоса
0

Вы можете определить интерфейс внутри AndroidDeviceAdapterследующим образом:

interface MyCheckedTextListener {
    fun onCheckedTextClicked()
}

Вместо Contextпараметра, Конструктор адаптера должен принимать MyCheckedTextListenerпараметр:

class AndroidDeviceAdapter(internal var checkedTextListener: MyCheckedTextListener,
     private val devices: Array<String>) : RecyclerView.Adapter<MyListAdapter.MyViewHolder>()

ActivityДолжен пройти в экземпляре MyCheckedTextListenerпри инстанцировании адаптера.

Адаптер будет сообщать с Activityпомощью этого экземпляра:

override fun onBindViewHolder(holder: MyViewHolder?, position: Int) {
    holder?.simpleCheckedTextView?.setOnClickListener {
        checkedTextListener.onCheckedTextClicked()
    }
}

Таким образом, Activityможно установить новое Buttonсостояние (а Buttonможет остаться privateи без static)

Ответил 07/11/2018 в 20:32
источник пользователем

голоса
0

Пожалуйста, попробуйте следующее.

(context as OrderActivity).order_button.isEnabled = true

Предполагая , что order_buttonпеременная в вашей OrderActivity.

Ответил 07/11/2018 в 20:22
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more