最近在项目中使用Fragment,在某个Fragment中使用了ViewPager,ViewPager每一页的内容是一个GridView,在初始化Fragment的时候,inflater了一个view,然后让这个view作为viewPager的Parent,之后往ViewPager里加入views,生成每个view的代码如下:
private View newPerPage(){
LayoutInflater inflater =(LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.per_page,null);
GridView gridview = (GridView) layout.findViewById(R.id.per_page);
GridAdapter gridAdapter = new GridAdapter(activity);
gridview.setAdapter(gridAdapter);
gridview.setOnTouchListener(forbidenScroll());
gridview.setOnItemClickListener(clickFuncItem());
return gridview;
}
注意蓝色部分,这时候滑动ViewPager的时候就会产生标题所示的异常。
原因很简单了,gridview有了两个Parent,一个是初始化Fragment的inflater的view,一个是在newPerPage()时inflater的一个view。解决的办法其实很简单。代码如下:
private View newPerPage(){
LayoutInflater inflater =(LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.per_page,null);
GridView gridview = (GridView) layout.findViewById(R.id.per_page);
GridAdapter gridAdapter = new GridAdapter(activity);
gridview.setAdapter(gridAdapter);
gridview.setOnTouchListener(forbidenScroll());
gridview.setOnItemClickListener(clickFuncItem());
return layout;
}
直接返回gridview的父类就可以了。