1

我正在制作一个下载器应用程序,并且在 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() 为空。

哪个视图是父视图,哪个视图是子视图?

编码:

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);
        }
    }
//...
}
4

2 回答 2

1

那是因为您返回具有父级的列表视图(在 V 的布局树中的某处)。

对于任何类型的 fragment , onCreateView 应该返回一个没有任何 parent 的视图。

在这种情况下,因为它是一个 listFragment,所以创建 listview(使用 xml 或以编程方式),然后返回它。不允许它有任何父母,因为它需要有父母作为片段。

阅读此处了解更多信息:

当片段第一次绘制其用户界面时,系统会调用它。要为您的 Fragment 绘制 UI,您必须从此方法返回一个 View,它是Fragment 布局的根。如果片段不提供 UI,您可以返回 null。

于 2013-01-12T11:11:31.157 回答
1

请注意,inflate 的第三个参数为 false。所以替换这一行

View V = inflater.inflate (R.layout.list, null);    

有了这个

View V = inflater.inflate (R.layout.list, null,false); 

你完成了。希望这会有所帮助。

于 2013-01-12T11:17:25.180 回答