何时使用getActiviy()何时使用View来初始化Fragments中的对象?

时间:2014-09-17 21:10:49

标签: java android android-fragments

我把一切都搞定了。我想知道为什么以及如何运作。

我想使用Bundle SavedInstanceState在textView上保留我的设置。在片段中从纵向到横向数据保留并重置一切都很好;然而,当回到肖像....在TextView对象上崩溃NPE!在一些Logging之后,我注意到TVobject没有设置回到Portrait。我的解决方法如下......有人可以帮我理解幕后发生的事情。感谢。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sis) {
    // TODO Auto-generated method stub
    v=inflater.inflate(R.layout.myhistfrag_b, container, false);


    text = (TextView) getActivity().findViewById(R.id.tvNewD);
    // work around reset with v not getActivity() ///  why ?
    if(text==null){
        text = (TextView) v.findViewById(R.id.tvNewD);
    }


    if( sis != null ) {
        Log.e("myLog me", sis.get("data").toString());
        Log.d("myLog me 2", text.toString());
    text.setText(sis.get("data").toString());


    }


    return v;
}

1 个答案:

答案 0 :(得分:0)

因为您在Fragment中创建了View的{​​{1}}。它尚未附加到onCreateView(),因此使用Activity搜索视图将始终失败。使用Activity只需创建 onCreateView()的{​​{1}},并使用Fragment使用{{View引用1}}在方法中提供(或者在那时你可以使用onViewCreated())。例如:

View