0

好的,我有一个登录类,如下面的片段

public class LoginClass {

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

}

这个类非常通用,但根据调用 LoginClass.login() 的活动,我希望执行不同的操作。

我见过一些实现,其中一个函数被传递到类中,然后这个函数在完成时运行。谁能给我一个简短的例子来说明如何做到这一点。

4

3 回答 3

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方式。

于 2012-08-17T14:10:08.607 回答
1

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

在调用者中定义处理程序

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

将您的处理程序传递给登录函数:

LoginClass.login(mHandler);

然后向处理程序发送一条消息:

public void login(Handler handler)
{
 handler.sendEmptyMessage(0);
}
于 2012-08-17T14:11:17.700 回答
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)
于 2012-08-17T14:14:17.827 回答