如何从Recyclerview.ViewHolder调用后端

问题描述

我有一个recyclerview和一个correspoinding视图持有者来保存单个项目。 观看者具有onClick需要与后端进行通信的按钮。 我有一个存储库类,与后端对话是我活动的一部分。

class QuestionDetailsActivity : AppCompatActivity() {

    @Inject
    lateinit var myRepository: MyRepository
    // OnCreate other functionality etc.
}

下面是我的视口布局。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
    android:id="@+id/updateBackendButton"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="Update"/>
<View
    android:id="@+id/textView"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="2"
    android:text="Text view"/>
<Button
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="Right Button"/>
</LinearLayout>

我的如下的Viewholder类

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

 private val button = view.updateBackendButton

 init {
   updateBackendButton.setonClickListener {
       // I would like to call backend here with textView data
   }
 }

 companion object {
        fun create(parent: ViewGroup): MyViewHolder {
            val view = LayoutInflater.from(parent.context)
                    .inflate(R.layout.my_item,parent,false)
            return MyViewHolder(view)
        }
    }
}

如何使 MyRepository 在viewHolder内部可用,我是否还应将其注入到Viewholder内或接受ViewHolder中的方法作为活动的补充,并在ViewHolder中调用方法?争论?

解决方法

我将创建一个接口来处理onClick,并在Activity中实现该接口。在那里,您可以使用自己的注入器访问Repo。

updateBackendButton.setOnClickListener {
    listener.onUpdateBackendButton()
}

收听者可能如下:

interface YourListener {
    fun onUpdateBackendButton()
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...