在做ColorGame游戏的时候,根据UI,要实现一个dialog,里面是Viewpager,viewPager里面是Fragment,Fragment里面是一个GridView
UI如下:
实现方法并不困难
首先是dialog的实现,我们选择DialogFragment
注意在布局的时候,第一层ViewGroup的大小是会被忽略的(不知道为什么),所以我们要嵌入两个层ViewGroup,然后在第二层设置Dialog的大小
然后就是ViewPager有一个Adapter,GridView里面也有一个Adapter
在实现ViewPager的Adapter的时候,
public class MyViewPagerAdapter extends FragmentStatePagerAdapter
注意这里要继承的是FragmentStatePagerAdapter
并且复写以下方法
@Override public int getItemPosition(Object object) { return POSITION_NONE; }
这样做是为了当ViewPager里面的数据更新时,视图也会更新
在构造方法里面
public MyViewPagerAdapter(FragmentManager fm, ArrayList<LevelFragment> levelFragments) { super(fm); this.levelFragments = levelFragments; }
要传入ChildFragmentManager而不是SupportFragmentManager
Constant.tempAdapter = new MyViewPagerAdapter(getChildFragmentManager(),levelFragments);
上面所说的就是我遇见的三个问题的解决办法
1,使用DialogFragment的大小无法调整
2,ViewPager配置Adapter失败
3,ViewPager数据更新以后,视图没有更新