0

再一次,我对 AndroidSDK 很恼火。为什么这必须如此复杂?


我有一个 ViewPager,我想用我的 Fragment 填充它。我在一个 Activity 上实现了这个并且它有效。但是当它在另一个片段中时,整个事情都崩溃了,错误消息什么也没告诉我:

07-01 12:58:20.210: E/AndroidRuntime(10146): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

这是我的代码:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_tabwrapper, container);

    List<Fragment> fragments = getFragments();
    pageAdapter = new MyPageAdapter(getActivity()
            .getSupportFragmentManager(), fragments);



    pager = (ViewPager) v.findViewById(R.id.viewpager); 
    pager.setAdapter(pageAdapter); // <- CRASH!

    return v;
}

顺便说一句:整个事情都是基于这个教程:http ://architects.dzone.com/articles/android-tutorial-using

4

3 回答 3

0

你不应该使用ViewGroup提供onCreateView的作为容器来放置你的膨胀视图:

改变

View v = inflater.inflate(R.layout.fragment_tabwrapper, container); 

View v = inflater.inflate(R.layout.fragment_tabwrapper, null);

于 2013-07-01T12:13:48.700 回答
0

这可能会对该主题有所了解:http: //developer.android.com/about/versions/android-4.2.html#NestedFragments

恕我直言:我不明白为什么开发人员会忍受这些工具。我发现他们不可能一起工作。难怪 Play 商店中有这么多低质量的应用程序。我期待着这个项目完成的那一天。不会很快再次使用此操作系统...

于 2013-07-01T13:50:13.617 回答
0

发生此错误是因为您必须在视图寻呼机中设置适配器之前删除所有视图,以便正确处理.....所以检查一下:

   MyPageAdapter pageAdapter ;

   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_tabwrapper, container);

    List<Fragment> fragments = getFragments();
    pageAdapter = new MyPageAdapter(getActivity()
        .getSupportFragmentManager(), fragments);



    pager = (ViewPager) v.findViewById(R.id.viewpager); 
    pager.removeallviews();

    pager.setAdapter(pageAdapter); // <- CRASH!

    return v;

}

于 2013-07-01T11:09:26.973 回答