[英]Android Call a method from adapter
我在片段中有一个方法,当用户单击 recyclerview 项目时我想调用它。 例如
holder.addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//call the method in fragment
//e.g. activity instance context dot(.) method name
mainActivity.refreshData();
}
}
在主要活动中,它很简单
public void refreshData(){
// refresh
}
创建点击监听的接口:
interface ItemClickListener {
void onItemClick();
}
将此侦听器添加到RecyclerView
适配器的构造函数中:
private final ItemClickListener itemClickListener;
public MyAdapter(ItemClickListener itemClickListener) {
this.itemClickListener = itemClickListener;
}
并为您的addButton
添加点击侦听器:
holder.addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemClickListener.onItemClick();
}
}
在您的活动 class 中将ItemClickListener
接口的实现传递给您的适配器,例如:
MyAdapter adapter = new MyAdapter(() -> refreshData());
这个function在你的main-class
中:
public void refreshData(){
// refresh
}
现在可以通过这个在你的适配器中调用function 。
holder.addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//call the method in fragment
//e.g. activity instance context dot(.) method name
((MainActivity) Objects.requireNonNull(context)).refreshData();
}
}
注意:您需要将片段context
传递给您的适配器。 这是我如何将上下文从main-class
传递到片段然后将片段传递给adapter
的示例代码。
Context context;
public ProfileFragment(Context context) {
this.context = context;
}
adapter = new ProfileTimelineAdapter(context, modelFeedArrayList);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.