Android 从适配器调用方法

时间:2021-04-22 07:54:12

标签: java android fragment 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
}

2 个答案:

答案 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);