为啥 findFragmentById 总是返回 null
Posted
技术标签:
【中文标题】为啥 findFragmentById 总是返回 null【英文标题】:why does findFragmentById always returns null为什么 findFragmentById 总是返回 null 【发布时间】:2014-09-12 16:58:26 【问题描述】:我正在尝试使用 findFragmentById 获取我的片段,但每次我在其位置获得 null 时,我也尝试使用 findFragmentByTag 并向我的添加事务添加标签,但这也是一样的。
以下代码是修改后的空白起始模板(为简单起见)
公共类 MainActivity 扩展 Activity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(null);
setContentView(R.layout.activity_main);
FragmentManager fragmentManager = getFragmentManager();
if (savedInstanceState == null)
fragmentManager.beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
PlaceholderFragment placeholderFragment = (PlaceholderFragment) fragmentManager
.findFragmentById(R.id.container);
if (placeholderFragment == null)
Log.i("TAG", "placeholderFragment is null");
else
Log.i("TAG", "placeholderFragment is not null");
public static class PlaceholderFragment extends Fragment
public PlaceholderFragment()
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
return rootView;
我尝试用add(R.id.container, new PlaceholderFragment(), "TAG")
替换添加然后尝试用findFragmentByTag("TAG")
访问它也没有成功。
如何让我的代码按预期工作?
【问题讨论】:
【参考方案1】:我认为问题在于您在添加Fragment
后试图立即找到它。在那段时间里,Fragment
可能还没有添加。
您可以做的是,在添加片段时您已经拥有该片段。
findFragmentById()
函数一般是在你已经添加了一段时间后,在其他函数中访问Fragments
。
这是一个例子
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(null);
setContentView(R.layout.activity_main);
FragmentManager fragmentManager = getFragmentManager();
PlaceholderFragment placeholderFragment = new PlaceholderFragment();
if (savedInstanceState == null)
fragmentManager.beginTransaction()
.add(R.id.container, placeholderFragment).commit();
public void anotherFunc()
PlaceholderFragment placeholderFragment = (PlaceholderFragment) fragmentManager
.findFragmentById(R.id.container);
【讨论】:
以上是关于为啥 findFragmentById 总是返回 null的主要内容,如果未能解决你的问题,请参考以下文章
迁移到 AndroidX 后,findFragmentById 为片段返回 null
Fragment使用findFragmentById返回null
Android findFragmentById 返回 null
SupportMapFragment 的 findFragmentById 在 Android Studio 中返回 null
getSupportFragmentManager().findFragmentById 为 android 片段中的谷歌地图返回 null?