Fragment嵌套ViewPager

来源:互联网 发布:转移概率矩阵计算方法 编辑:程序博客网 时间:2024/06/05 19:15

先看效果图,很多应用中都有
这里写图片描述
点击下面四个按钮,切换不同的fragment,同时第一个fragment里面又嵌套了一个ViewPager,实现了两个fragment的切换。

代码实现:

public class MainActivity extends FragmentActivity implements        OnCheckedChangeListener {    private RadioGroup rg_home;    private RadioButton rb_home;    private Fragment content;    private FragmentTransaction transaction;    HomeFragment homeFragment;    FindFragment findFragment;    OtherFragment otherFragment;    MineFragment mineFragment;    private int currentIndex = 0;    private boolean isRecycle = false;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        rg_home = (RadioGroup) findViewById(R.id.rb_group);        rb_home = (RadioButton) findViewById(R.id.rb_home);        rg_home.setOnCheckedChangeListener(this);        content = new HomeFragment();// 默认创建HomeFragment        transaction = getSupportFragmentManager().beginTransaction();        rb_home.setChecked(true);// 选中第一个按钮    }    @Override    protected void onSaveInstanceState(Bundle outState) {        outState.putBoolean("isRecycle", true);// 当Activity重建的时候回执行此方法        outState.putInt("currentIndex", currentIndex);// 保存当前选中的位置    }    @Override    protected void onRestoreInstanceState(Bundle savedInstanceState) {        super.onRestoreInstanceState(savedInstanceState);        isRecycle = savedInstanceState.getBoolean("isRecycle");        currentIndex = savedInstanceState.getInt("currentIndex");    }    @Override    protected void onResume() {        super.onResume();        if (isRecycle) {            ((RadioButton) (rg_home.getChildAt(currentIndex))).setChecked(true);        }    }    @Override    public void onCheckedChanged(RadioGroup group, int checkedId) {        switch (checkedId) {        case R.id.rb_home:            currentIndex = 0;            if (homeFragment == null) {                homeFragment = new HomeFragment();            }            switchFragment(content, homeFragment);            break;        case R.id.rb_other:            currentIndex = 1;            if (otherFragment == null) {                otherFragment = new OtherFragment();            }            switchFragment(content, otherFragment);            break;        case R.id.rb_find:            currentIndex = 2;            if (findFragment == null) {                findFragment = new FindFragment();            }            switchFragment(content, findFragment);            break;        case R.id.rb_mine:            currentIndex = 3;            if (mineFragment == null) {                mineFragment = new MineFragment();            }            switchFragment(content, mineFragment);            break;        }    }    /**     * 切换Fragment,避免每次创建新的实例     *      * @param from     * @param to     */    public void switchFragment(Fragment from, Fragment to) {        if (content != to) {            content = to;            FragmentTransaction transaction = getSupportFragmentManager()                    .beginTransaction();            if (!to.isAdded()) {                transaction.hide(from).add(R.id.fl_main, to).commit();            } else {                // Toast.makeText(this,"直接显示",Toast.LENGTH_SHORT).show();                transaction.hide(from).show(to).commit();            }        }    }}
public class HomeFragment extends Fragment{    private ViewPager pager;    private List<Fragment> list;    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,            Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.home, null);        pager = (ViewPager) view.findViewById(R.id.pager);        list = new ArrayList<Fragment>();        list.add(new FragmentOne());        list.add(new FragmentTwo());        pager.setAdapter(new MyAdapter(getFragmentManager(), list));        return view;    }    class MyAdapter extends FragmentPagerAdapter{        private List<Fragment> list;        public MyAdapter(FragmentManager fm,List<Fragment> list) {            super(fm);            this.list = list;        }        @Override        public Fragment getItem(int arg0) {            return list.get(arg0);        }        @Override        public int getCount() {            return list.size();        }    }}
0 0
原创粉丝点击