java - 如何在构造函数中传递 Recycler 视图适配器?
问题描述
假设我有三个这样的适配器,每个适配器都定义了一个接口,即 ClickListener,它有一个方法 onItemClick。
public class SearchResultAdapter extends RecyclerView.Adapter<SearchResultAdapter.searchResultViewHolder>
{
....
public interface ClickListener {
void onItemClick(int paramInt, View paramView);
}
}
如何将适配器传递给构造函数,以便我可以访问类内的 ClickListener() 方法适配器。
例子
public class ABC{
private RecyclerView.Adapter adapter;
public ABC(RecyclerView.Adapter adapter){
this.adapter = adapter;
}
private void xyz(){
//How to achieve this
recyclerView.setOnClickListener(new adapter.ClickListener(){
@Override
public void onItemClick(int position, View v) {
}
});
}
解决方案
好吧,在您的 Activity/Fragment 中,您有 RecyclerView 实例,在那里,您应该能够传递给ABC
Recycler,以便它可以附加 onClick。
但是,我建议更好的设计是:您的活动/片段将您的适配器 OnClickListener 实现为:接收点击并将其传递给 ABC,然后 ABC 处理它。
喜欢:
public class SearchResultAdapter extends RecyclerView.Adapter<SearchResultAdapter.searchResultViewHolder>
{
public void setListener(ClickListener listener){
this.listener = listener;
}
public interface ClickListener {
void onItemClick(int paramInt, View paramView);
}
}
public class ABC {
public void adapterClicked(){
// do something here on adapter item clicked.
}
}
public class Activity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout....);
SearchResultAdapter adapter = new ........();
ABC abc = new ABC();
adapter.setOnClickListener(() -> {
abc.adapterClicked();
}); // java 8
}
}
推荐阅读
- php - 如何使用带有多个复选框的 SELECT(sql)?
- sql - Postgres DISTINCT 到单行
- scala - 生产中 kafka-streams 拓扑的演变
- push-notification - 网络推送通知
- excel - 将 excel 映射到 XML - 导入 XML 字段的问题
- asp.net - Visual Studio 2015 和 IIS Express 获得 ERR_CONNECTION_REFUSED
- java - Java 计算器 - 调车场
- c# - 您可以将特定会话变量设置为仅存活 5 分钟吗?
- sql - 从sql server中的json数组中提取单个值
- python - 从命令提示符运行 Python - Unicode 错误