由于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);
}
}