如何在android中从函数调用回监听器?
OK,我有一个登录类像下面如何在android中从函数调用回监听器?
public class LoginClass {
public void login() {
login.authorize(username,password);
//run activity specific code here
}
片断}
这个类是非常通用的,但根据其活动呼吁LoginClass.login(),我想不同的动作是执行。
我见过一些函数被传入类的实现,然后这个函数在完成时运行。任何人都可以给我一个关于如何做到这一点的简单例子。
在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的方式。
按照原样接受此答案是有关如何处理回调的最完整说明。最后,我决定去实现一个接口 – totalitarian 2012-08-17 16:24:07
您可以使用处理程序提供回调机制。
定义处理程序在调用者
Handler mHandler = new Handler()
{
public void handleMessage(Message msg)
{
}
}
通过你的处理程序的登录功能:
LoginClass.login(mHandler);
然后发送处理的消息:
public void login(Handler handler)
{
handler.sendEmptyMessage(0);
}
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)
我真的不能这样做,因为我创建的类将用于api。因此,调用该类的用户将编写自己的函数 – totalitarian 2012-08-17 14:48:26
我的第一个猜测将是一个回调,像这样:[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
@ 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