为什么我在使用getView时在以下代码上获取null?
public void menuItemSelected(int itemId) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.layout.fragment_main, mShoppingCartFragment, "ShoppingCartFragment");
ft.commit();
ft.addToBackStack(null);
View aaa = mShoppingCartFragment.getView(); <-- null here
TextView fk = (TextView)findViewById(R.id.textView1); <-- null here
fk.setText("clicked by " + itemId);
}
答案 0 :(得分:1)
史蒂夫提到FragmentTransaction.commit()
是异步调用,但您始终可以调用:
ft.executePendingTransactions();
您将阻止此方法,直到所有待处理的交易完成
答案 1 :(得分:0)
FragmentTransaction.commit()是异步调用,因此它不会立即返回。因此,如果您在它之后立即调用View aaa = mShoppingCartFragment.getView();
,则您的片段可能为空。
此外Fragment.getView()将为null,如果回调onCreateView(...)
未返回或您为其返回null,则表示没有与此片段关联的View。
两者都可以在您的代码段中使用。
如果TextView fk = (TextView)findViewById(R.id.textView1);
返回null,请确保id textView1是Activity布局的一部分。如果它是片段的视图,请在那里获得参考。