gpt4 book ai didi

android - FragmentManager findFragmentById 返回 null

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:45:51 25 4
gpt4 key购买 nike

activity_fragment.xml代码:

<?xml version="1.0" encoding="utf-8" ?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragmentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>

CrimeListActivity.java代码

package com.sinory.criminalintent;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;

public class CrimeListActivity extends SingleFragmentActivity {

@Override
protected Fragment createFragment() {
return new CrimeListFragment();
}

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

Log.d("CrimeListActivity", "create");
}

}

SingleFragmentActivity.java代码

package com.sinory.criminalintent;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;

public abstract class SingleFragmentActivity extends FragmentActivity {

protected abstract Fragment createFragment();

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment);

FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.fragmentContainer);

if (null == fragment) {
fragment = new CrimeListFragment();
fm.beginTransaction().add(R.id.fragmentContainer, fragment).commit();
}
}
}

刚开始学习安卓。为什么 Fragment fragment = fm.findFragmentById(R.id.fragmentContainer) 为空?请帮助我。

最佳答案

首先,您不需要检查 fragment 是否为空,因为当一个 Activity 销毁时,所有 fragment 也将被销毁。所以在 onCreate Activity 中不会有 fragment ,您需要在每次 Activity 重新创建时添加它。
其次不要使用 findFragmentById。只有在 xml 文件中定义 fragment 时才使用此方法。现在您已经动态添加了您的 fragment ,您需要指定一个字符串标记,然后使用该标记来查找该 fragment 。

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment);

FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().add(R.id.fragmentContainer, fragment,"TagName").commit();
}

如果您需要找到您的 fragment ,只需使用此代码

Fragment fragment = fm.findFragmentByTag("TagName");


2019 年 1 月 9 日更新
截至 2018 年,您可以简单地使用 Google 导航库在应用程序的页面( fragment )之间导航。它将处理所有事务并使导航变得更加容易和清晰。在这里查看 https://developer.android.com/topic/libraries/architecture/navigation/

关于android - FragmentManager findFragmentById 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23369621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com