繁体   English   中英

分段获取父活动

[英]get parent activity in fragment

我正在使用Facebook SDK,并且遇到问题。 FacebookLoginFragment正在覆盖我的登录活动。 实际上,我知道为什么会这样,但是我现在正在解决一个小时。

我需要在onCreateView方法中使用该视图,但是如果对其进行膨胀,则该视图只是对activity_login的覆盖。 我如何获得正确的视图而又不夸大它?

请参见下面的代码。

登录扩展FragmentActivity

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    //get editText Views
    editTextlogin = (EditText) findViewById(R.id.editText_login);
    editTextpasswd = (EditText) findViewById(R.id.editText_passwd);

    if (savedInstanceState == null) {
        // add the fragment on initial activity setup
        mainFragment = new FacebookLoginFragment();
        getSupportFragmentManager().beginTransaction()
                .add(android.R.id.content, mainFragment).commit();
    } else {
        // or set the fragment from restored state info
        mainFragment = (FacebookLoginFragment) getSupportFragmentManager()
                .findFragmentById(android.R.id.content);
    }

}

FacebookLoginFragment扩展了Fragment

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    uiHelper = new UiLifecycleHelper(getActivity(), callback);
    uiHelper.onCreate(savedInstanceState);
    con = new FacebookConnection();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.activity_login, container, false);

    // The results of the authentication are returned to the activity, to
    // get the Fragment to receive it
    // call the setFragment() method
    LoginButton authButton = (LoginButton) view
            .findViewById(R.id.authButton);
    authButton.setFragment(this);
    if (Session.getActiveSession().isClosed()) {
        authButton.setReadPermissions("user_status", "email", "publish_actions");
    }

    return view;
}

activity_login

(我知道相对布局不是最佳实践,仅用于测试)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="at.ts_company.activity.Login" >

<View
    android:id="@+id/view1"
    android:layout_width="fill_parent"
    android:layout_height="1dp"
    android:layout_centerInParent="true"
    android:background="@color/primary_material_light" />

<EditText
    android:id="@+id/editText_login"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="108dp"
    android:ems="10"
    android:hint="@string/login_loginname"
    android:inputType="text" >

    <requestFocus />
</EditText>

<EditText
    android:id="@+id/editText_passwd"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/editText_login"
    android:layout_centerHorizontal="true"
    android:ems="10"
    android:hint="@string/login_passwd" 
    android:inputType="textPassword"/>

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_centerHorizontal="true"
    android:adjustViewBounds="true"
    android:contentDescription="@string/logo"
    android:scaleType="fitCenter"
    android:src="@drawable/final_logo" />

<TextView
    android:id="@+id/textView_createAccount"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="68dp"
    android:text="@string/login_createAccount" 
    android:clickable="true"
    android:onClick="register"/>

<Button
    android:id="@+id/button_login"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/editText_passwd"
    android:layout_centerHorizontal="true"
    android:drawableLeft="@drawable/arrow_right"
    android:text="@string/login_loginbutton" 
    android:onClick="login"/>

<com.facebook.widget.LoginButton
    android:id="@+id/authButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/textView_createAccount"
    android:layout_alignLeft="@+id/editText_passwd"
    android:layout_marginBottom="40dp" />

好吧,我必须回答我自己的问题。

这不是我想的那么容易,也不是我想到的解决方案。

我已经在Fragment(FacebookLoginFragment)中添加了功能,并且在Login.java中,我仅将其称为Fragment。

我必须在“登录名”中删除setContentView(R.layout.activity_login) ,然后将所有功能(除了if语句添加到Fragment中)添加。

我在Login.xml中为按钮定义了onClick方法,因此在Login.java中有一个方法login(View view) ,它仅调用fragment.login(View view)

也许有点晚了,但是为什么不通过静态实例访问它呢?

private static MyActivity Instance; 
public static MyActivity getInstance() {  return Instance; }

然后在onCreate方法中,将活动分配给Instance Instance = this; 但是一定要检查返回的实例是否不为null

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM