【问题标题】: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);
      

      【讨论】:

        猜你喜欢
        • 2012-08-21
        • 1970-01-01
        • 1970-01-01
        • 2018-11-07
        • 2015-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多