再一次,我对AndroidSDK非常恼火。为什么这必须如此复杂?
我有一个ViewPager,我想用我的片段填充。我在一个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;
}
BTW:整个过程基于本教程:http://architects.dzone.com/articles/android-tutorial-using
答案 0 :(得分:0)
发生此错误是因为您必须在viewpager中设置适配器之前删除所有视图,以便正确方式.....所以请检查:
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;
}
答案 1 :(得分:0)
您不应该使用ViewGroup
提供的onCreateView
容器来填充您的虚张声势的视图:
更改
View v = inflater.inflate(R.layout.fragment_tabwrapper, container);
到
View v = inflater.inflate(R.layout.fragment_tabwrapper, null)
;
答案 2 :(得分:0)
这可能会对这个主题有所启发:http://developer.android.com/about/versions/android-4.2.html#NestedFragments
恕我直言:我不明白为什么开发人员会忍受这些工具。我觉得他们不可能合作。难怪Play商店有这么多低质量的应用程序。我期待这个项目完成的那一天。不会很快再次使用这个操作系统......