为什么我在getView上得到null?

时间:2014-05-25 10:56:37

标签: android

为什么我在使用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);

    }

2 个答案:

答案 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布局的一部分。如果它是片段的视图,请在那里获得参考。