0

我正在尝试将 Google+ 登录添加到我的应用中。我正在关注的示例显示了如何在 Activity 中设置所有内容,但我试图在我的主 FragmentActivity 中有登录按钮时在片段中包含有关登录逻辑的所有内容。我是 Android 新手,所以我不知道该怎么做,但我想知道如何从登录按钮触发我在片段(处理所有登录内容)中的 onClick() 事件在我的 FragmentActivity 中有吗?

我试图将此添加到我的活动的 onCreate 中:

googleAuthButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            googlePlusFragment.onClick(v);
        }
    });

这当然行不通。我会很感激这方面的帮助。

4

1 回答 1

2

希望保持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,没有任何问题。

于 2013-10-22T20:01:40.130 回答