您的位置:首页 > 其它

安卓用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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息