问题描述
我有一个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()
}