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 的教程,我拥有了我应该拥有的一切:UiLifecycleHelper uiHelper 实例,它在 onResume、onActivityResult、onPause、onDestroy 和 onSaveInstanceState 中调用。LoginDialog 中的登录按钮通过以下方式初始化:

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

但这在我将 onActivityResult 添加到 WelcomeFragment 之前不起作用,与 MainActivity 中相同:

@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 回答