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のライブラリを変更するか、ネイティブリスナーをオーバーライドしない限り、ユーザーのクリックを識別する方法を見つけることができないようです。

4

4 に答える 4

9

アプリケーションにログインライブラリを実装しようとしたときに、同じ問題が発生しました。これまでのところ、私が見つけた解決策は、それが最善かどうかはまだわかりませんが、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-03-23T16:50:55.343 に答える
2

を調べてください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-04-14T16:14:48.420 に答える
2

メソッドをオーバーライドし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);
        }
    }

};
于 2013-11-06T11:25:12.273 に答える
-1

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) ;
} 
于 2013-05-16T13:55:52.880 に答える