我正在使用com.facebook.widget.LoginButton组件登录Facebook:
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原生监听器。
发布于 2013-03-24 00:50:55
在尝试为我的应用程序实现登录库时,我遇到了同样的问题。到目前为止,我找到的解决方案是将facebook-sdk中的LoginClickListener类从私有改为公共,这样我就可以在我的活动中重写onClick方法。下面是我更改的代码行。
发自:
private class LoginClickListener implements OnClickListener {
@Override
public void onClick(View v) {
...至:
public class LoginClickListener implements OnClickListener {
@Override
public void onClick(View v) {
...然后,在我的活动中,我能够重写onClick方法。
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);
}
});祝好运。
发布于 2013-04-15 00:14:48
查看HelloFacebookSample。他们在那里做这样的事情。
loginButton.setUserInfoChangedCallback(new LoginButton.UserInfoChangedCallback() {
@Override
public void onUserInfoFetched(GraphUser user) {
updateUI(user);
}
});然后在updateUI()方法中
private void updateUI(GraphUser user) {
Session session = Session.getActiveSession();
if (session != null && session.isOpened() && user != null) {
mTextView.setText(user.getFirstName());
}
}如果您正在关注连接会话(请参阅示例以了解详细信息),则即使用户退出应用程序,登录状态也将保持不变。
发布于 2013-11-06 19:25:12
而不是试图覆盖onclick方法或更改Facebook的lib。您可以使用SessionState来检测是否已单击loginButton。当SessionState打开时,表示该按钮已被单击
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);
}
}
};https://stackoverflow.com/questions/15334236
复制相似问题