Facebook SDK 3 Кнопка входа Идентификация по щелчку

Я использую компонент 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.

Но я не могу найти способ идентифицировать клик пользователя, не изменяя LoginButton Facebook, или переопределять встроенный прослушиватель LoginButton .

Я столкнулся с той же проблемой, пытаясь внедрить логин для моего приложения. До сих пор решение, которое я нашел, все еще не уверен, является ли оно лучшим или нет, меняет класс LoginClickListener внутри facebook-sdk от частного до публичного , поэтому я могу переопределить метод 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); } }); 

Удачи.

Вместо того, чтобы пытаться переопределить метод onclick или изменить onclick Facebook. Вы можете использовать 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); } } }; 

Посмотрите на 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()); } } 

Если вы заботитесь о сеансе подключения (см. Пример для получения подробной информации), тогда статус входа пользователя будет сохранен даже после выхода из приложения.

Вместо того, чтобы перегружать LoginButton, я просто использовал фон изображения. Несмотря на то, что текст по умолчанию не выравнивается идеально, игра с полями может помочь.

 Button fbBtn = (Button)findViewById(R.id.fbLogin) ; if( fbBtn != null ) { fbBtn.setBackgroundDrawable(getResources().getDrawable(R.drawable.com_facebook_loginbutton_blue) ) ; fbBtn.setText( R.string.prompt_login_yes ) ; fbBtn.setTextColor( getResources().getColor(R.color.com_facebook_loginview_text_color) ) ; fbBtn.setTextSize( 16 ) ; fbBtn.setVisibility(View.VISIBLE) ; }