首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Facebook SDK 3点击时识别登录按钮

Facebook SDK 3点击时识别登录按钮
EN

Stack Overflow用户
提问于 2013-03-11 16:40:49
回答 4查看 6.2K关注 0票数 3

我正在使用com.facebook.widget.LoginButton组件登录Facebook:

代码语言:javascript
运行
复制
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.splash, container, false);
    LoginButton authButton = (LoginButton) view.findViewById(R.id.login_button);
    stat = (TextView) view.findViewById(R.id.profile_name);
    //authButton.setFragment(this);
    authButton.setReadPermissions(Arrays.asList("user_likes", "user_status",
            "user_status", "user_events", "friends_events"));

    return view;
}

我想要提示用户他的登录状态,所以当Facebook的按钮被按下时,我需要更改文本视图。

但我似乎找不到一种方法来识别用户的点击,而不改变Facebook的库,或者覆盖LoginButton原生监听器。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-24 00:50:55

在尝试为我的应用程序实现登录库时,我遇到了同样的问题。到目前为止,我找到的解决方案是将facebook-sdk中的LoginClickListener类从私有改为公共,这样我就可以在我的活动中重写onClick方法。下面是我更改的代码行。

发自:

代码语言:javascript
运行
复制
private class LoginClickListener implements OnClickListener {
    @Override
    public void onClick(View v) {
        ...

至:

代码语言:javascript
运行
复制
public class LoginClickListener implements OnClickListener {
    @Override
    public void onClick(View v) {
        ...

然后,在我的活动中,我能够重写onClick方法。

代码语言:javascript
运行
复制
LoginButton facebookButton = (LoginButton) findViewById(R.id.authButton);
facebookButton.setOnClickListener( facebookButton.new LoginClickListener(){
    @Override
    public void onClick(View v) {
        //Do whatever u want
        super.onClick(v);
    }
});

祝好运。

票数 9
EN

Stack Overflow用户

发布于 2013-04-15 00:14:48

查看HelloFacebookSample。他们在那里做这样的事情。

代码语言:javascript
运行
复制
loginButton.setUserInfoChangedCallback(new LoginButton.UserInfoChangedCallback() {
    @Override
    public void onUserInfoFetched(GraphUser user) {
        updateUI(user);
    }
});

然后在updateUI()方法中

代码语言:javascript
运行
复制
private void updateUI(GraphUser user) {
    Session session = Session.getActiveSession();
    if (session != null && session.isOpened() && user != null) {
        mTextView.setText(user.getFirstName());
    }
}

如果您正在关注连接会话(请参阅示例以了解详细信息),则即使用户退出应用程序,登录状态也将保持不变。

票数 2
EN

Stack Overflow用户

发布于 2013-11-06 19:25:12

而不是试图覆盖onclick方法或更改Facebook的lib。您可以使用SessionState来检测是否已单击loginButton。当SessionState打开时,表示该按钮已被单击

代码语言:javascript
运行
复制
private Session.StatusCallback fBcallback = new Session.StatusCallback() {
    @Override
    public void call(Session session, SessionState state,
            Exception exception) {
        Session fbSession = session;

        Log.e(this.getClass().getName(), "fbSession isNULL "
                + (fbSession == null));

        Log.e(this.getClass().getName(),
                "fbSession state:" + fbSession.getState() + "");

        switch (fbSession.getState()) {
        case CLOSED:
            Log.e(this.getClass().getName(), "CLOSED");

            break;
        case CLOSED_LOGIN_FAILED:
            Log.e(this.getClass().getName(), "CLOSED LOGIN FAILED");

            authButton.setVisibility(View.VISIBLE);
            rl.setVisibility(View.GONE);
            break;
        case CREATED:
            Log.e(this.getClass().getName(), "CREATED");

            break;
        case CREATED_TOKEN_LOADED:
            Log.e(this.getClass().getName(), "CREATED TOKEN LOADED");

            break;
        case OPENED:
            Log.e(this.getClass().getName(), "OPENED");

            break;
        case OPENED_TOKEN_UPDATED:
            Log.e(this.getClass().getName(), "OPENED TOKEN UPDATED");

            break;
        case OPENING:
            Log.e(this.getClass().getName(), "OPENING");

            authButton.setVisibility(View.GONE);
            rl.setVisibility(View.VISIBLE);
            break;
        }

        if (fbSession.isOpened()) {
            Log.e(this.getClass().getName(), "fbSession is opened");

            getFBUserData();
        }
        if (fbSession.isClosed()) {
            Log.e(this.getClass().getName(), "fbSession is closed, logout");
            Token.removeToken(mActivity);
        }
    }

};
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15334236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档