Android 从适配器调用方法

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();
            }
   }

在主要 activity 中会很简单

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();
    }
}

ItemClickListener 接口的实现传递给 activity class 中的适配器,例如:

MyAdapter adapter = new MyAdapter(() -> refreshData());

这个函数在你的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);