Facebook对话框内的登录按钮

时间:2013-02-13 14:58:05

标签: java android facebook mobile

如果用户已登录,我想在某个部分显示某些内容。但是,如果用户未登录,我想显示一个提示用户登录的对话框。我还想在这个对话框中显示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方法上,它包含一个取消按钮,可以解除它。

我将不胜感激任何帮助。非常感谢提前。

2 个答案:

答案 0 :(得分:4)

我想出了这个,这很简单,但并不那么优雅。

我所做的是将facebook登录按钮放在主要布局中,隐藏起来。然后,我在对话框按钮上设置了一个监听器,在其中我添加了“facebookLogin.performClick();”。

将点击重定向到facebook登录监听器。

非常感谢!

答案 1 :(得分: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()调用而不是在activity中,您可以在LoginButton实例上调用setFragment()方法。“