我尝试使用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")
访问它也没有成功。如何使我的代码按预期工作?
最佳答案
我认为问题是添加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);
}
关于java - 为什么findFragmentById总是返回null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24877784/