我想在用户单击 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
}
答案 0 :(得分:3)
创建一个点击监听器的接口:
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();
}
}
在您的活动类中将 ItemClickListener
接口的实现传递给您的适配器,例如:
MyAdapter adapter = new MyAdapter(() -> refreshData());
答案 1 :(得分:1)
此功能在您的main-class
中:
public void refreshData(){
// refresh
}
现在可以在您的适配器中调用该函数。
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
传递到 fragment 然后将 fragment 传递到 adapter
的示例代码。
Context context;
public ProfileFragment(Context context) {
this.context = context;
}
adapter = new ProfileTimelineAdapter(context, modelFeedArrayList);