2

ユーザーがログインしている場合はセクションに特定のコンテンツを表示したいのですが、ユーザーがログインしていない場合は、ユーザーにログインを促すダイアログを表示したいと考えています。また、このダイアログ内に Facebook のログイン ボタンを表示したいと思います。

ただし、ダイアログ内のログイン ボタンが機能していないようです。アクティビティ レイアウト内に配置すると、機能します。

ダイアログ内で正しく機能させる方法はありますか?

ダイアログxmlは次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ImageView
        android:id="@+id/heart"
        android:layout_width="80dp"
        android:layout_height="70dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="70dp"
        android:background="@drawable/favorite_dialog"/>

    <TextView
        android:id="@+id/question_favorites"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#FFFFFF" 
        android:layout_below="@+id/heart"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="20dp"
        android:layout_centerHorizontal="true"
        android:textStyle="bold"
        android:textSize="20sp"/>

     <TextView
        android:id="@+id/explanation_favorites"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#FFFFFF" 
        android:layout_below="@+id/question_favorites"
        android:layout_marginTop="20dp"
        android:layout_marginLeft="40dp"
        android:layout_marginRight="40dp"
        android:textSize="18sp"
        android:textStyle="italic"
        android:layout_centerHorizontal="true"/>

     <com.facebook.widget.LoginButton
        android:id="@+id/authButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_above="@+id/button"
        android:layout_centerHorizontal="true"
        />

    <Button 
        android:id="@+id/button"
        android:layout_height="40dp"
        android:layout_width="200dp"
        android:text="Cancelar"
        android:textStyle="bold"
        android:textSize="18sp"
        android:layout_marginTop="10dp"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="30dp"
        android:background="@drawable/cancel"/>

</RelativeLayout>

このダイアログは onCreate メソッドで表示され、それを閉じるキャンセル ボタンが含まれています。

助けていただければ幸いです。よろしくお願いします。

4

2 に答える 2

4

私はこれを考え出しました。それは非常にシンプルですが、それほどエレガントではありませんでした。

私がしたことは、Facebookのログインボタンをメインレイアウト内に隠して配置することでした。次に、ダイアログ ボタンにリスナーを設定し、その中に「facebookLogin.performClick();」を追加しました。

これにより、クリックが facebook ログイン リスナーにリダイレクトされました。

とにかく、ありがとう!

于 2013-02-13T19:05:23.213 に答える
0

私も同じエラーで立ち往生しました。しかし、最終的に私はそれを機能させることができました:

つまり、MainActivity は WelcomeFragment を開きます。WelcomeFragment は LoginDialog (自分のダイアログ) を開きます。LoginDialog には facebookLogin ボタンがあります。MainActivity の内部には、facebook のチュートリアルに従って必要なものがすべてありました: onResume、onActivityResult、onPause、onDestroy、および onSaveInstanceState で呼び出される UiLifecycleHelper uiHelper インスタンス。LoginDialog のログイン ボタンは、次のように初期化されました。

LoginButton authButton = (LoginButton) findViewById(R.id.facebookLogin);
authButton.setReadPermissions(Arrays.asList("email"));
authButton.setFragment(welcomeFragment);

しかし、MainActivity と同じように、onActivityResult を WelcomeFragment に追加するまで、これは機能しませんでした。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    ((MainActivity)getActivity()).uiHelper.onActivityResult(requestCode, resultCode, data);
}

また、https : //developers.facebook.com/docs/android/login-with-facebook/v2.2 で説明されています。

「認証フロー中、結果はデフォルトでメイン アクティビティに返されます。アクティビティは、onActivityResult() メソッドをオーバーライドして結果を処理する必要があります。フラグメントがアクティビティではなく onActivityResult() 呼び出しを受信できるようにするには、 LoginButton インスタンスで setFragment() メソッドを呼び出すことができます。」

于 2014-08-06T10:09:37.760 に答える