如何从Activity类接收回调到android中的ListView Adapter类?

时间:2016-07-27 10:06:52

标签: android callback

我有一个自定义Listview和按钮的Activity。现在 我想在适配器类中实现Activity按钮回调。 如何在Android中实现? 请给我一些建议。

1 个答案:

答案 0 :(得分:2)

第一个解决方案自己的聆听者

它应该由Listeners完成,在Activity中创建Listener接口,在Adapter类中创建下一个实现接口。将Adapter对象设置为Activity的侦听器,当你想在Adapter中执行某些操作时,最后一件事运行Listener方法。

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
 }
}

第二个解决方案适配器作为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
  } 
}

第三种解决方案 - 可以在没有接口的情况下完成(不是很好的实践)

只需将方法添加到您的适配器并使用它:

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
 }
}