Search code examples
javaandroidfragmentadapter

Android Call a method from adapter


I have a method in a fragment that I want to call when user clicks a recyclerview item. For example

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

In main activity it will be simple as

public void refreshData(){
     // refresh
}


Solution

  • Create an interface of a click listener:

    interface ItemClickListener {
        void onItemClick();
    }
    

    Add this listener to your RecyclerView adapter's constructor:

    private final ItemClickListener itemClickListener;
    
    public MyAdapter(ItemClickListener itemClickListener) {
        this.itemClickListener = itemClickListener;
    }
    

    And add there the click listener for your addButton:

    holder.addButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            itemClickListener.onItemClick();
        }
    }
    

    Pass the implementation of ItemClickListener interface to your adapter in your activity class, for example like this:

    MyAdapter adapter = new MyAdapter(() -> refreshData());