Java 为什么findFragmentById总是返回null
我正在尝试使用findFragmentById获取片段,但每次我在其位置获取null时,我也尝试使用findFragmentByTag并将标记添加到我的add事务中,但这也是一样的 下面的代码是一个修改过的空白起始模板(为了简单起见) 公共类MainActivity扩展了活动{Java 为什么findFragmentById总是返回null,java,android,android-fragments,fragment,fragmentmanager,Java,Android,Android Fragments,Fragment,Fragmentmanager,我正在尝试使用findFragmentById获取片段,但每次我在其位置获取null时,我也尝试使用findFragmentByTag并将标记添加到我的add事务中,但这也是一样的 下面的代码是一个修改过的空白起始模板(为了简单起见) 公共类MainActivity扩展了活动{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(null); setContentView(R.
@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”)替换add
,然后尝试用findFragmentByTag(“TAG”)
访问它,但也没有成功
如何使我的代码按预期工作?我认为问题在于,在添加
片段后,您正试图立即找到它。在那短短的时间里,片段
可能还没有添加
你能做的是,当你添加片段时,你已经拥有了它
findFragmentById()
函数通常用于在添加了一段时间后访问其他函数中的片段
这里有一个例子
@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()
函数通常用于在添加了一段时间后访问其他函数中的片段
这里有一个例子
@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()
函数通常用于在添加了一段时间后访问其他函数中的片段
这里有一个例子
@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()
函数通常用于在添加了一段时间后访问其他函数中的片段
这里有一个例子
@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);
}