APP导航Fragment与RadioGroup
2016-04-15 12:23
267 查看
使用Fragment+RadioGroup生成app导航栏
现在越来越多的app,都已经采用了Fragment进行开发,今天我们就谈一下如何去实现底部导航,点击按钮切换各个模块,如下所示:
先贴出布局文件:
主要有两种方法实现:
使用Fragment,通过replace进行切换,当然这个一般生成的Fragment都会销毁掉,无法保存状态
另外一种方法,我们可以通过使用hide(), show(),继续通过事务来进行管理,
现在越来越多的app,都已经采用了Fragment进行开发,今天我们就谈一下如何去实现底部导航,点击按钮切换各个模块,如下所示:
先贴出布局文件:
fragment_station.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="40dp"> <RadioGroup android:id="@+id/rg_group" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#F5F5F5" android:gravity="center" android:orientation="horizontal"> <RadioButton android:id="@+id/id_auto_car" style="@style/BottomTabStyle" android:background="@drawable/selector_radio_checked" android:checked="true" android:text="机动车" android:textColor="@color/btn_text_selector" /> <RadioButton android:id="@+id/id_hc_car" style="@style/BottomTabStyle" android:background="@drawable/selector_radio_checked" android:text="货车" android:textColor="@color/btn_text_selector" /> <RadioButton android:id="@+id/id_ck_car" style="@style/BottomTabStyle" android:layout_height="match_parent" android:background="@drawable/selector_radio_checked" android:text="客车" android:textColor="@color/btn_text_selector" /> <RadioButton android:id="@+id/id_crowd" style="@style/BottomTabStyle" android:layout_height="match_parent" android:background="@drawable/selector_radio_checked" android:text="拥挤度" android:textColor="@color/btn_text_selector" /> <RadioButton android:id="@+id/id_speed" style="@style/BottomTabStyle" android:background="@drawable/selector_radio_checked" android:text="车速" android:textColor="@color/btn_text_selector" /> </RadioGroup> </LinearLayout> <View android:background="@color/gray" android:layout_width="match_parent" android:layout_height="0.5dp"/> <FrameLayout android:id="@+id/id_label_container" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
主要有两种方法实现:
使用Fragment,通过replace进行切换,当然这个一般生成的Fragment都会销毁掉,无法保存状态
public class StationFragment extends BaseFragment{ private View view; private RadioGroup rg_group; private AutoCarFragment mAutoCarFragment; private HcCarFragment mHcCarFragment; private KcCarFragment mKcCarFragment; private CrowdFragment mCrowdFragment; private SpeedFragment mSpeedFragment; @Override protected View initView() { view = View.inflate(getActivity(), R.layout.fragment_station, null); setDefaultFragment(); initRadioGroup(); return view; } //设置默认选中机动车 private void setDefaultFragment() { FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); mAutoCarFragment = new AutoCarFragment(); transaction.replace(R.id.id_label_container, mAutoCarFragment); transaction.commit(); } private void initRadioGroup() { rg_group = (RadioGroup) view.findViewById(R.id.rg_group); rg_group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); switch (checkedId) { case R.id.id_auto_car: if (mAutoCarFragment == null) { mAutoCarFragment = new AutoCarFragment(); } transaction.replace(R.id.id_label_container, mAutoCarFragment); break; case R.id.id_hc_car: if (mHcCarFragment == null) { mHcCarFragment = new HcCarFragment(); } transaction.replace(R.id.id_label_container, mHcCarFragment); break; case R.id.id_ck_car: if (mKcCarFragment == null) { mKcCarFragment = new KcCarFragment(); } transaction.replace(R.id.id_label_container, mKcCarFragment); break; case R.id.id_crowd: if (mCrowdFragment == null) { mCrowdFragment = new CrowdFragment(); } transaction.replace(R.id.id_label_container, mCrowdFragment); break; case R.id.id_speed: if (mSpeedFragment == null) { mSpeedFragment = new SpeedFragment(); } transaction.replace(R.id.id_label_container, mSpeedFragment); break; default: break; } transaction.addToBackStack(null); transaction.commit(); } }); } }
另外一种方法,我们可以通过使用hide(), show(),继续通过事务来进行管理,
public class MainActivity extends FragmentActivity { private Fragment[] mFragments; private RadioGroup rgGroup; private FragmentManager fragmentManager; private FragmentTransaction fragmentTransaction; private boolean mIsExit = false; public static final int STATIONFRAGMENT = 0; public static final int ROUTELINEERAGMENT = 1; public static final int DISTRICTFRAGMENT = 2; public static final int MAINLINEFRAGMENT = 3; public static final int MINEFRAGMENT = 4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mFragments = new Fragment[5]; fragmentManager = getSupportFragmentManager(); mFragments[0] = new StationFragment(); mFragments[1] = new RouteLineFragment(); mFragments[2] = new DistrictFragment(); mFragments[3] = new MainlineFragment(); mFragments[4] = new MineFragment(); fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.add(R.id.container, mFragments[0]); fragmentTransaction.add(R.id.container, mFragments[1]); fragmentTransaction.add(R.id.container, mFragments[2]); fragmentTransaction.add(R.id.container, mFragments[3]); fragmentTransaction.add(R.id.container, mFragments[4]); fragmentTransaction.hide(mFragments[0]).hide(mFragments[1]).hide(mFragments[2]).hide(mFragments[3]).hide(mFragments[4]); fragmentTransaction.show(mFragments[STATIONFRAGMENT]).commit(); setFragmentIndicator(); } @Override protected void onSaveInstanceState(Bundle outState) { } private void setFragmentIndicator() { rgGroup = (RadioGroup) findViewById(R.id.rg_group); rgGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId) { case R.id.id_station: setShowFragment(STATIONFRAGMENT); break; case R.id.id_routeline: setShowFragment(ROUTELINEERAGMENT); break; case R.id.id_district: setShowFragment(DISTRICTFRAGMENT); break; case R.id.id_main_line: setShowFragment(MAINLINEFRAGMENT); break; case R.id.id_mine: setShowFragment(MINEFRAGMENT); break; default: break; } } }); } /** * 设置跳转fragment * * @param fragmentnum */ public void setShowFragment(int fragmentnum) { fragmentTransaction = fragmentManager.beginTransaction() .hide(mFragments[0]).hide(mFragments[1]) .hide(mFragments[2]).hide(mFragments[3]).hide(mFragments[4]); fragmentTransaction.show(mFragments[fragmentnum]).commit(); } }
相关文章推荐
- android写京东首页
- iOS路径问题
- Swift 取子字符串
- Android Service中给其他的组件回传数据。
- android studio2.0出现的gradle问题,instant Run即时运行不了.
- android studio2.0出现的gradle问题,instant Run即时运行不了.
- iOS集成构建
- 充分掌握Android Debug Bridge(ADB)
- android EditText 自动获取焦点并弹出软键盘
- Android3.1后系统接收不到广播的问题解析
- android下拉刷新精彩动画
- Android_android签名证书的sha1值获取
- Android编程获取图片和视频缩略图的方法
- android 获取状态栏高度
- iOS小结
- Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class
- iOS presentViewController 之后设置界面透明
- iOS中的动画
- ios CGRec用法
- IOS(CGGeometry)几何类方法总结