希望保持Activity
代码简单易读并没有错。但这种Fragment
方法很奇怪。背景片段有它们的位置,但这不是其中之一。我认为您需要做的就是class
为每个登录功能创建一个新功能。然后,您可以在按下右键时调用该类,并以这种方式外包实际登录。基本设置是这样的
googleAuthButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
GoogleLogIn logIn = new GoogleLogIn(new LoggedInListener(){
@Override
public void loggedIn(String whatever){
//if you need info from the log in use it here
}
});
logIn.logMeIn(value);
}
});
然后在你的 GoogleLogInClass
public class GoogleLogIn{
private LoggedInListener listener;
public GoogleLogIn(LoggedInListener listener){
this.listener = listener;
}
public void logMeIn(String info){
//whatever you need to do to log in
if(someConditionTrue){
listener.loggedIn(someValueReturned);
} else {
listener.loggedIn(someValueThatIsFalse);
}
}
}
我的一般想法是将逻辑移动到您调用按钮的 onClick 的类中。然后你可以调用一些方法来做任何你想做的事情。您可以使用回调从登录类中获得反馈,该回调会将您需要的任何信息返回给主机活动,以便您以后可以使用它。
我不知道登录 google+ 或 facebook 需要什么,所以现在这是我能做的最好的。如果您需要做的只是传递一些数据并返回响应,您可以通过让您登录类扩展AsyncTask
并以这种方式实现日志来进一步简化事情。只需在调用 execute() 时将值作为参数传递。
编辑 - 从 XML 调用方法
如果上面的代码因为嵌套的 callabcks 看起来太疯狂了,你可以让它变得更简单。在声明按钮的 XML 中,您可以添加一个onClick
选项。这允许您在按下按钮时调用的活动中指定公共方法。没有回电。没有废话。如果您遵循这种方法,您只需添加以下内容
public void nameThisMethodWhateverYouWant(View v){
/call your log in class here
}
这更容易阅读。我觉得 XML onclick 功能只是在某个 API 级别之后才添加的,但是使用支持包,我个人将其运行低至 2.3.6,没有任何问题。