簡體   English   中英

活動啟動時的默認片段

[英]Default fragment on Activity Launch

我正在嘗試加載一個片段作為該活動的默認視圖,但是我只是得到了一個空白屏幕和大量內存泄漏。

活動文件的onCreate方法:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_login);

    if (savedInstanceState == null) {
        FragmentManager fragmentManager = getFragmentManager();
        int fragmentTransaction = fragmentManager.beginTransaction()
                .add(R.id.login_screen_fragment, new FragmentLogin())
                .commit();
    }
}

活動的XML:

<FrameLayout 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"
    tools:context=".LoginActivity">

    <fragment
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/login_screen_fragment"
        class="com.test.project.FragmentLogin"
    />

    <fragment
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/forgotten_password_fragment"
        class="com.test.project.FragmentForgottenPassword"
    />
</FrameLayout>

和Fragment類(相關部分):

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

    final View view = inflater.inflate(R.layout.fragment_login, container, false);
    final Activity activity = getActivity();

    ... code ...

    return view;
}

我遵循了某人先前從另一個問題中提出的教程中的指示,但是我一定做錯了什么。 有任何想法嗎?

xml文件

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/changeFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".LoginActivity">
</FrameLayout>

你的活動

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);

 setContentView(R.layout.activity_login);

if (savedInstanceState == null) {
    FragmentLogin f1= new FragmentLogin();
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
    fragmentTransaction.add(R.id.changeFragment, f1);
    fragmentTransaction.commit();

   }
}

我是Android的新手,但遇到了同樣的問題。 這是我固定我的方法。

因此,在onCreate方法中,使用FragmentManager類中的getSupportFragmentManager(),然后分別聲明FragmentTransaction。 見下文。 我為我的案子做了這個,並且奏效了。

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_login);

if (savedInstanceState == null) {
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.add(R.id.login_screen_fragment, new FragmentLogin());
    fragmentTransaction.commit();
}

希望這也可以解決您的問題。

真誠的

只需將fragment元素替換為FrameLayout,即可看到您的片段。

如果要以編程方式添加片段,請在幀布局中刪除<Fragment>並為其添加一些ID。

它看起來應該像這樣:

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/login_screen_fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".LoginActivity" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM