有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android从适配器调用方法

我想在用户单击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) 个答案

  1. # 1 楼答案

    这个函数在^{中:

        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传递到片段,然后将片段传递到adapter的exmaple代码

    Context context;
       public ProfileFragment(Context context) {
            this.context = context;
        }
      adapter = new ProfileTimelineAdapter(context, modelFeedArrayList);
    
  2. # 2 楼答案

    创建单击侦听器的界面:

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