I have Activity with a custom Listview and button. Now I want to implement Activity button callback in adapter class. How its possible in Android ? Please give me suggestion.
Asked
Active
Viewed 2,043 times
1 Answers
3
FIRST SOLUTION OWN LISTENER
It should be done by Listeners, create Listener interface in Activity, next implement interface in Adapter class. Set Adapter object as listener of Activity and last thing run Listener methods when You want to do something in Adapter.
class Activity{
private Listener listener;
//your activity listener interface
public interface Listener{
onButtonClick();
}
private void setListener(Listener listener){
this.listener=listener;
}
//example method
private void youMethod(){
YourAdapter adapter=new YourAdapter();//YourAdapter class implements Listener
//here You say that adapter is You listener
setListener(adapter);
//bind button
Button button = (Button)findViewById(R.id.buttonName);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v)
{
//run listener after button click
buttonIsClicked();
//or
//listener.onButtonClick();
}
});
}
private void buttonIsClicked(){
//here use method
listener.onButtonClick();
}
}
//EXAMPLE ADAPTER
class YourAdapter implements Activity.Listener{
//...adapter code
void onButtonClick(){
//your code on button click
}
}
SECOND SOLUTION ADAPTER AS ONCLICKLISTENER
class Activity{
//example method
private void youMethod(){
YourAdapter adapter=new YourAdapter();
//bind button
Button button = (Button)findViewById(R.id.buttonName);
//set adapter as onClickListener
button.setOnClickListener(adapter);
}
}
//EXAMPLE ADAPTER
class YourAdapter implements OnClickLstener{
//...adapter code
public void onClick(View v)
{
//adpater code after click
}
}
THIRD SOLUTION - IT CAN BE DONE WITHOUT INTERFACE ( NOT GOOD PRACTICE )
Just add method to Your adapter and use it:
button.setOnClickListener(new OnClickListener() {
public void onClick(View v)
{
//use adapter
adapter.onButtonClick();
}
});
//EXAMPLE ADAPTER WITHOUT INTERFACE
class YourAdapter{
//...adapter code
void onButtonClick(){
//your code on button click
}
}

Maciej Sikora
- 19,374
- 4
- 49
- 50
-
How to call this method setListener(Listener listener) ? – Mihir Patel Jul 27 '16 at 10:28
-
It is in my code YourAdapter adapter=new YourAdapter();//YourAdapter class implements Listener //here You say that adapter is You listener setListener(adapter); – Maciej Sikora Jul 27 '16 at 10:32
-
setListener() method takes Listerer as an argument. so how can i pass my Adapter object – Mihir Patel Jul 27 '16 at 10:34
-
You adapter object has to implement Listener interface so it can be passed, it is tipical usage of interface. – Maciej Sikora Jul 27 '16 at 10:38
-
Check my code - class YourAdapter implements Activity.Listener – Maciej Sikora Jul 27 '16 at 10:39
-
It is possible without implement Listener in Adapter class? – Mihir Patel Jul 27 '16 at 11:05
-
Yes check my answer it is third solution. – Maciej Sikora Jul 27 '16 at 11:06
-
Actually my problem is here : http://stackoverflow.com/questions/38606594/how-to-get-activity-button-click-listener-in-recyclerview-adapter-class – Mihir Patel Jul 27 '16 at 11:12
-
Let us [continue this discussion in chat](http://chat.stackoverflow.com/rooms/118422/discussion-between-mihir-patel-and-maciej-sikora). – Mihir Patel Jul 27 '16 at 11:15