如果用户已登录,我想在某个部分显示某些内容。但是,如果用户未登录,我想显示一个提示用户登录的对话框。我还想在这个对话框中显示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方法上,它包含一个取消按钮,可以解除它。
我将不胜感激任何帮助。非常感谢提前。
答案 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()方法。“