Call a Fragment method from an Adapter
Solution 1:
Edit : Here is what I would use now. Older, "easier" solutions are available below.
MyFragment extends Fragment implements CustomAdapter.EventListener {
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
CustomAdapter adapter = new CustomAdapter(..., this);
}
void onEvent(int data) {
doSomething(data);
}
}
CustomAdapter extends BaseAdapter {
EventListener listener;
public interface EventListener {
void onEvent(int data);
}
public CustomAdapter(..., EventListener listener) {
this.listener = listener;
}
...
}
Now from any place in the adapter we can call listener.onEvent(data);
to trigger the method in the fragment.
Moreover, instead of providing a listener through the constructor, we can add another method in the adapter such as registerListener(EventListener eventListener)
and then maintain a list of listeners if needed.
Old Answer:
Solution 1 : Make the adapter an inner class of your fragment, so that you can call the method directly.
Solution 2 : Update your adapter constructor to accept the Fragment as a parameter.
Something like :
customAdapter = new CustomAdapter(myContext, android.R.layout.simple_list_item_1, getList, HomeFragment.this);
and update the constructor of the Adapter :
public CustomAdapter(Context context, int id, HomeFragment fragment) {
this.fragment = fragment;
}
then you call methods using the fragment variable.
fragment.doSomething();
Solution 2:
I know it's late to answer but There are 2 ways more to do it:
You can also send
broadcast
fromadapter
and register it infragment
.Use interface. Refer this SO question for details.