Android 从适配器调用方法

Posted

技术标签:

【中文标题】Android 从适配器调用方法【英文标题】:Android Call a method from adapter 【发布时间】: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


【问题讨论】:

【参考方案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);

【讨论】:

以上是关于Android 从适配器调用方法的主要内容,如果未能解决你的问题,请参考以下文章

Android dataBinding 之 配合使用BaseAdapter适配器

无法从RecyclerView适配器类调用方法

getView() 方法是如何使用的,它在哪里被调用?

从 android 模拟器调用时无法调用工作灯适配器

Android 暗黑模式快速适配

使用 AsyncTask 中的 onPostExecute 方法列表项单击事件调用 Android 中的另一个活动