2012-08-17 74 views
0

OK,我有一个登录类像下面如何在android中从函数调用回监听器?

public class LoginClass { 

    public void login() { 
     login.authorize(username,password); 
      //run activity specific code here 
    } 

片断}

这个类是非常通用的,但根据其活动呼吁LoginClass.login(),我想不同的动作是执行。

我见过一些函数被传入类的实现,然后这个函数在完成时运行。任何人都可以给我一个关于如何做到这一点的简单例子。

+1

我的第一个猜测将是一个回调,像这样:[http://stackoverflow.com/questions/3398363/how-to-define-callbacks-in-android][1] [1]:http://stackoverflow.com/questions/3398363/how-to-define-callbacks-in-android – sschrass 2012-08-17 14:08:08

+1

@ user1565982:你可以看看我发布的同一个问题的答案:http: //stackoverflow.com/questions/10776764/what-is-the-right-way-to-communicate-from-a-custom-view-to-the-activity-in-which/10776818#10776818。我已经在那里展示了如何实现View派生类的监听器 - 但它完全是相同的实现。只需将“view”一词改为“LoginClass”即可,并且您已得到答案 – 2012-08-17 14:35:08

回答

2

在Android上看到的函数不是Java中的头等对象 - 您无法传递函数。 Java的意识形态需要专业化时从您的泛型类派生(可能是匿名的)。就像这样:

class MyActivity 
{ 

    void onCreate() 
    { 
     MyButton.addOnClickListener(
      new LoginClass() 
      { 
       //Just like LoginClass, but with one method overridden 
       public void login() 
       { 
        super.login(); //Call the base 
        ThenSomethingElse(); 
       } 
      }); 
    } 
} 

或者,您可以创建在登录类挂钩 - 而覆盖在活动 - 每当需要自定义操作所调用的函数。这就是Java的方式。

+0

按照原样接受此答案是有关如何处理回调的最完整说明。最后,我决定去实现一个接口 – totalitarian 2012-08-17 16:24:07

1

您可以使用处理程序提供回调机制。

定义处理程序在调用者

Handler mHandler = new Handler() 
{ 
public void handleMessage(Message msg) 
{ 
} 
} 

通过你的处理程序的登录功能:

LoginClass.login(mHandler); 

然后发送处理的消息:

public void login(Handler handler) 
{ 
handler.sendEmptyMessage(0); 
} 
1
public class LoginClass { 

    public void login(boolean b) { 
     login.authorize(username,password); 
      if (b){ 
       //do something 
      } 
      else { 
       //do something 
      } 
    } 

刚使用构造函数参数去做这个。

Class 1 
LoginClass loginClass = new LogonClass(false) 

Class 2 
LoginClass loginClass = new LogonClass(true) 
+0

我真的不能这样做,因为我创建的类将用于api。因此,调用该类的用户将编写自己的函数 – totalitarian 2012-08-17 14:48:26