安卓用Fragment+RadioButton组合构成的底部导航栏的实现
2016-08-23 17:17
465 查看
由于Fragment是3.0后才有的,所以使用时一般还是导入V4的包;直接上demo,代码中做说明:
import java.util.ArrayList; import java.util.List; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.view.KeyEvent; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; import android.widget.Toast; /**BaseFragmentActivity类就不贴代码了*/ public class MainActivity extends BaseFragmentActivity implements OnCheckedChangeListener { private RadioGroup radiogroup; private int current_Fragment = -1; private List<Fragment> list_fragment; // 最后一次按返回的时间 private long lastExitTime = 0; //定义的三个Fragment private OtherFragment otherf; private MineFragment minef; private MainFragment mainf; //获得布局文件 @Override public int getContentViewId() { // TODO Auto-generated method stub return R.layout.activity_main; } //实例化控件 @Override public void findViews() { // TODO Auto-generated method stub radiogroup = (RadioGroup) findViewById(R.id.radioGroup1); } //监听事件 @Override public void widgetListener() { // TODO Auto-generated method stub radiogroup.setOnCheckedChangeListener(this); } //初始化数据 @Override public void init() { // TODO Auto-generated method stub otherf = new OtherFragment(); mainf = new MainFragment(); minef = new MineFragment(); list_fragment = new ArrayList<Fragment>(); list_fragment.add(mainf); list_fragment.add(otherf); list_fragment.add(minef); //默认选择第0个 switchId(0); } //页面切换 protected void switchId(int position) { // TODO Auto-generated method stub if (current_Fragment == position) { return; } // 获取Fragment的操作对象 FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.frameLayout1, list_fragment.get(position)); if (current_Fragment != -1) { getSupportFragmentManager().popBackStack(position + "", 0); transaction.addToBackStack(position + ""); // 将上一个Fragment存回栈,生命周期为stop,不销毁 } transaction.commitAllowingStateLoss();// 提交更改 current_Fragment = position; } @Override public void onCheckedChanged(RadioGroup group, int checkedId) { // TODO 选择不同的radiobutton时切换不同的页面 switch (checkedId) { case R.id.radio0: switchId(0); break; case R.id.radio1: switchId(1); break; case R.id.radio2: switchId(2); break; } } /** * 再按一次退出 * * 如果不实现这个(这里索性实现的一个再按一次退出的功能,大多应用都会有这种提示吧), * 按返回键的时候,不会直接退出应用,而是切换了多少次button,就要按多少次返回, * 才能退出,如有更好的方法解决这个问题,请大神留言告知。 */ @Override public boolean dispatchKeyEvent(KeyEvent event) { if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) { if (event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) { // 判断2次点击事件时间 if ((System.currentTimeMillis() - lastExitTime) > 2000) { Toast.makeText(context, "再按一次退出", Toast.LENGTH_LONG).show(); lastExitTime = System.currentTimeMillis(); } else { finish(); } } return true; } return super.dispatchKeyEvent(event); } }
相关文章推荐
- 使用RadioButton+Fragment实现底部导航栏效果
- FragmentTabHost+RadioButton实现底部导航栏(带小红点提示)
- RadioButton+Fragment实现底部导航栏
- Android商城开发系列(三)——使用Fragment+RadioButton实现商城底部导航栏
- Android项目ViewPager+Fragment+RadioButton实现底部导航栏切换
- 使用RadioButton+Fragment实现底部导航栏
- 安卓开发--应用市场的界面制作(一)--viewpager+fragment实现可滑动的底部导航栏
- Android UI-实现底部切换标签之方式一 ──fragment(底部采用radioGroup+radiobutton)添加5个子fragment
- fragment+RadioGroup实现底部导航栏 多个 fragment 重影问题
- Android底部导航栏—RadioButton+Fragment
- 安卓--类似微信底部导航栏实现原理(frame和radiogroup)
- 使用RadioButton+Fragment实现微信底部标签菜单
- 安卓APP底部导航栏(有消息圆点指示器),实现fragment切换(eclipse)
- 底部导航栏实现页面的切换(二):Fragment + RadioGroup
- RadioGroup+Fragment实现底部导航栏
- 【Android】安卓开发实战之使用Fragment(碎片)实现底部导航栏效果
- 底部导航栏实现页面的切换(三):Fragment + RadioGroup + ViewPager
- 模仿网易云课堂的底部导航栏切换—RadioButton+Fragment
- Android进阶之底部导航(RadioButton&Fragment&ViewPager)
- TextView+Fragment实现底部导航栏