viewPager+radiogroup实现关联
2016-07-25 13:48
267 查看
实现viewpager跟radioGroup关联
先看效果图代码撸出来
布局xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/toolbar" /> <android.support.v4.view.ViewPager android:id="@+id/container" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="60dp" android:background="@drawable/tabbg" android:orientation="horizontal"> <RadioGroup android:id="@+id/radiogroup" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <RadioButton android:id="@+id/btn_1" style="@style/chart_radiobutton" android:text="高一" /> <RadioButton android:id="@+id/btn_2" style="@style/chart_radiobutton" android:text="高一" /> <RadioButton android:id="@+id/btn_3" style="@style/chart_radiobutton" android:text="高一" /> <RadioButton android:id="@+id/btn_4" style="@style/chart_radiobutton" android:text="高一" /> </RadioGroup> </LinearLayout>
java代码
public class ChartActivity extends MVPBaseActivity<ChartView, ChartPresenter> implements ChartView { @Bind(R.id.toolbar_tv) TextView mToobarTv; @Bind(R.id.toolbar) Toolbar mToolbar; @Bind(R.id.container) ViewPager mViewPager; @Bind(R.id.btn_1) RadioButton btn1; @Bind(R.id.btn_2) RadioButton btn2; @Bind(R.id.btn_3) RadioButton btn3; @Bind(R.id.btn_4) RadioButton btn4; MyAdapter mAdapter; @Bind(R.id.radiogroup) RadioGroup radiogroup; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_chart); ButterKnife.bind(this); mToolbar.setTitle(""); mToobarTv.setText("测试"); setSupportActionBar(mToolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); radiogroup.setOnCheckedChangeListener(new MyRadioGroupListener()); initControoler(); } private class MyRadioGroupListener implements RadioGroup.OnCheckedChangeListener { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId) { case R.id.btn_1: mViewPager.setCurrentItem(0); break; case R.id.btn_2: mViewPager.setCurrentItem(1); break; case R.id.btn_3: mViewPager.setCurrentItem(2); break; case R.id.btn_4: mViewPager.setCurrentItem(3); break; } } } private void initControoler() { mAdapter = new MyAdapter(getSupportFragmentManager()); mViewPager.setAdapter(mAdapter); mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { switch (position) { case 0: radiogroup.check(R.id.btn_1); break; case 1: radiogroup.check(R.id.btn_2); break; case 2: radiogroup.check(R.id.btn_3); break; case 3: radiogroup.check(R.id.btn_4); break; } } @Override public void onPageScrollStateChanged(int state) { } }); } class MyAdapter extends FragmentStatePagerAdapter { public MyAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { BaseFragment fragment = FragmentFactory.getChartFragment(position); return fragment; } @Override public int getCount() { return 4; } @Override public CharSequence getPageTitle(int position) { return super.getPageTitle(position); } } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { onBackPressed(); } return super.onOptionsItemSelected(item); } @Override public void showProgress() { } @Override public void hideProgress() { } @Override public void showToast(String msg) { } @Override protected ChartPresenter createPresenter() { ChartPresenter presenter = new ChartPresenter(); return presenter; }
其中有的代码可以忽略不计。可以看到最主要的 是 要监听RadioGroup的RadioGroup.OnCheckedChangeListener,然后再监听viewpager的OnPagerChangeLisnterner 就好了。
FragmentFactory的代码,这里推荐如果framgent少的话可以这样子写
/** * Description:fragment工厂类<br> * Created by Administrator on 2016/7/6. */ public class FragmentFactory { static SparseArrayCompat<BaseFragment> cachesFragment = new SparseArrayCompat<>();// static SparseArrayCompat<BaseFragment> cachesChartFragment = new SparseArrayCompat<>();//图表 /** * 图表 * * @param position * @return */ public static BaseFragment getChartFragment(int position) { BaseFragment fragment = null; BaseFragment tempFragment = cachesChartFragment.get(position); if (tempFragment != null) { fragment = tempFragment; return fragment; } switch (position) { case 0: fragment = new FragmentOne(); break; case 1: fragment = new FragmentTwo(); break; case 2: fragment = new FragmentThree(); break; case 3: fragment = new FragmentFour(); break; } cachesChartFragment.put(position, fragment); return fragment; } //移除所有 public static void removeAllFragment() { if (cachesFragment != null && cachesFragment.size() > 0) { cachesFragment.clear(); } } //拿到列表 public static SparseArrayCompat<FragmentSupport> getListFragment() { if (cachesFragment != null && cachesFragment.size() > 0) { return cachesFragment; } return null; }
当然,有的可能会说怎么有时候里面的数据变了。或者重新进入,还有可能从cachesChartFragment 拿到原来存储的fragment,这里在activity的生命周期中设置下
在onDestory()或者onPause()中 if (FragmentFactory.getListFragment() != null && FragmentFactory.getListFragment().size() > 0) { FragmentFactory.removeAllFragment(); }
相关文章推荐
- R第二问 CentOS6.5安装 yum [Errno 256] No more mirrors to try
- 图像类型与图片格式
- Scanner类中的nextLine()产生的换行符问题
- Ruby中使用each和collect进行迭代的用法
- 服务器硬件
- linux设备驱动程序注册过程详解
- spl处理文件(文件详细信息、文件遍历、查询指定行、写入CSV文件)
- win下如何在yii框架下面使用sphinx
- Codeforces Round #281 (Div. 2) B 模拟
- 对称加密与非对称加密的区别
- java中的内部内总结
- 多线程同步
- android通过获取摄像头照片,实时与点传输
- CockroachDB 测试
- Description Resource Path Location Type Java compiler level does not match the version of the instal
- 基于按annotation的hibernate主键生成策略
- 套 接 字 →
- 大数据技能图谱
- Struts2约定优于配置
- 《上帝的跳蚤》2016060211-》2016070514