Android 无法将HeaderView添加到ListFragment

Android 无法将HeaderView添加到ListFragment,android,Android,下面是我在列表fragmet中添加列表的代码: public void onAttach(Activity activity) { super.onAttach(activity); System.err.println("Fragment Attach"); String[] MyList = {"Item 1","Item 2","Item 3","Item 4","Item 5"}; System.err.println("File Row ID" + In

下面是我在列表fragmet中添加列表的代码:

public void onAttach(Activity activity) {
    super.onAttach(activity);
    System.err.println("Fragment Attach");
    String[] MyList = {"Item 1","Item 2","Item 3","Item 4","Item 5"};
    System.err.println("File Row ID" + Integer.toString(R.layout.file_row));
    ArrayAdapter<String> aa = new ArrayAdapter<String>(getActivity(), R.layout.file_row, MyList);

    //Trying to add a Header View.
    TextView tv = (TextView) activity.findViewById(R.layout.file_row);
    tv.setText(R.string.FileBrowserHeader);
    this.getListView().addHeaderView(tv);

    //Setting the adapter
    setListAdapter(aa);         

}   
public-void-onatch(活动){
超级转速计(活动);
System.err.println(“碎片附着”);
字符串[]MyList={“项目1”、“项目2”、“项目3”、“项目4”、“项目5”};
System.err.println(“文件行ID”+Integer.toString(R.layout.File_行));
ArrayAdapter aa=新的ArrayAdapter(getActivity(),R.layout.file_行,MyList);
//正在尝试添加标题视图。
TextView tv=(TextView)activity.findViewById(R.layout.file\u行);
tv.setText(R.string.FileBrowserHeader);
this.getListView().addHeaderView(电视);
//设置适配器
setListAdapter(aa);
}   
但是,该行是this.getListView().addHeaderView(tv);告诉我错误

06-11 15:24:46.110:错误/AndroidRuntime(8532):原因:java.lang.IllegalStateException:尚未创建内容视图

程序崩溃了


有人能告诉我我做错了什么吗?

问题是您添加标题视图的时间太快了。 错误是由于您试图查找尚未创建的视图而导致的

片段的生命周期为(源:)

  • 一旦片段与其活动关联,就调用onAttach(Activity)
  • 调用onCreate(Bundle)进行片段的初始创建
  • onCreateView(LayoutFlater、ViewGroup、Bundle)创建并返回与片段关联的视图层次结构
  • onActivityCreated(Bundle)告诉片段它的活动已经完成了自己的activity.onCreate
  • onStart()使片段对用户可见(基于其所包含的正在启动的活动)
  • onResume()使片段与用户交互(基于其包含的正在恢复的活动)

  • 正如您所看到的,您正在尝试在onAttach中使用视图,但是视图直到onCreateView才存在!尝试将代码移动到onActivityCreate,这是在所有视图都存在之后发生的

    Wow!!感谢这一点,尽管我不得不更改代码的一行://TextView tv=(TextView)getActivity().findViewById(R.layout.file_行);这一行的TextView tv=newtextView(getActivity());然后成功了,谢谢!