Java 活动启动时的默认片段

Java 活动启动时的默认片段,java,android,Java,Android,我试图加载一个片段作为活动的默认视图,但我只得到一个空白屏幕和巨大的内存泄漏 活动文件onCreate方法: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); if (savedInstanceState == null) {

我试图加载一个片段作为活动的默认视图,但我只得到一个空白屏幕和巨大的内存泄漏

活动文件
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>

我遵循了之前有人从另一个问题中建议的教程的说明,但我一定是做错了什么。有什么想法吗?

只要用FrameLayout替换fragment元素,您就可以看到您的片段了

如果您希望以编程方式添加片段,则删除Framelayout中的
,并向其添加一些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" />

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>

我是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();
}
希望这也能帮助你解决问题

真诚地,
sylvery

在布局中定义
元素时,不需要在代码中动态加载这些元素。@MikeM。我在哪里执行此操作?
if
块正在动态实例化和处理
FragmentLogin
实例。
 @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();

   }
}
@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();
}