我正在制作一个下载程序应用程序,并且在onCreateView返回部分后我得到了孩子的父母错误。
我尝试了很多东西,但没有任何帮助。我试过了:
((ViewGroup)dlistView.getParent()).removeView(dlistView);
之后编译器说:
01-12 12:05:15.558: E/AndroidRuntime(10740): java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
或删除容器/我有一个npe /或删除V但V.getParent()为null。
哪个视图是父视图,哪个视图是子视图?
代码:
public static class DownloadingFragment extends ListFragment {
public static final String ARG_SECTION_NUMBER = "section_number";
public DownloadingFragment() {
}
@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View V = inflater.inflate (R.layout.list, null);
ListView dlistView = (ListView) V.findViewById(R.id.dlist);
List<DownloadInfo> downloadInfo = new ArrayList<DownloadInfo>();
downloadInfo.add(new DownloadInfo("File", 1000));
DownloadInfoArrayAdapter diaa = new DownloadInfoArrayAdapter(
getActivity().getApplication(),R.layout.list, downloadInfo);
dlistView.setAdapter(diaa);
return dlistView; // throw exception
}
}
//...
}
提前感谢您的帮助。
编辑: 新代码:
public static class DownloadingFragment extends Fragment {
public static final String ARG_SECTION_NUMBER = "section_number";
public DownloadingFragment() {
}
@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View V = inflater.inflate (R.layout.list, null);
return V;
}
@Override
public void onStart() {
// TODO Auto-generated method stub
super.onStart();
ListView dlistView = (ListView) getView().findViewById(R.id.dlist);
List<DownloadInfo> downloadInfo = new ArrayList<DownloadInfo>();
downloadInfo.add(new DownloadInfo("File", 1000));
DownloadInfoArrayAdapter diaa = new DownloadInfoArrayAdapter(
getActivity().getApplication(),R.layout.list, downloadInfo);
dlistView.setAdapter(diaa);
}
}
//...
}
答案 0 :(得分:1)
那是因为你返回了一个有一个父类的列表视图(在V的布局树中的某个地方)。
对于任何类型的片段,onCreateView都应该返回一个没有任何父片段的视图。
在这种情况下,因为它是一个listFragment,所以创建listview(使用xml或以编程方式),然后返回它。不要让它有任何父母,因为它需要父母作为片段。
阅读here了解更多信息:
系统在片段绘制时调用它 用户界面第一次。要为您的片段绘制UI,您 必须从此方法返回一个视图,这是您的根 片段的布局。如果片段没有,则可以返回null 提供用户界面。
答案 1 :(得分:1)
请注意,inflate的第三个参数为false。 所以替换这一行
View V = inflater.inflate (R.layout.list, null);
用这个
View V = inflater.inflate (R.layout.list, null,false);
你完成了。这有帮助。