【问题标题】:Android Call a method from adapterAndroid 从适配器调用方法
【发布时间】:2021-07-16 10:15:42
【问题描述】:
当用户单击 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
}
【问题讨论】:
标签:
java
android
fragment
adapter
【解决方案1】:
创建点击监听的接口:
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());
【解决方案2】:
这个函数在你的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);