繁体   English   中英

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

在主要活动中,它很简单

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM