今天改需求。突然发现用radiobutton来改变页面顺序失效的BUG。啊啊啊,还好没被老大发现(手动滑稽)。。。。
OK,今天的问题是radiobutton选中后,当前Activity消失,在进入页面时发现,我明明选的是第三个,怎么变成了第一个,我设置的是选中即发送请求,那么每次在进入此页面的时候岂不是都要发送一遍第一个按钮的值,在选择在发送。好乱的有木有。。
在网上找了好多,最开始是根据activity的onSaveInstanceState 来保存状态但是看了一圈,没有采用,我页没有验证那种方法好不好用,直接放弃(我承认我很懒)。
后来一想我直接用sharedpreference 来保存状态值不就好了嘛,就是这样。开干,发现不对。我是每一个按钮保存一个。后来发现这种做法好二奥。
先上代码吧,没代码说什么都没用,代码才是王道。
/**
* 这个就是RadioButton 的监听方法
* checkedId 这个是RadioButton的ID
**/
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId) {
case R.id.RB_urge:
requestData("0");//这是我的请求方法
//保存的状态值,这里我用的是加密的SP
AES256SharedPreferences.getInstance().edit().<Integer>putInt("1", checkedId).apply();
break;
case R.id.RB_postpone:
requestData("1");
AES256SharedPreferences.getInstance().edit().<Integer>putInt("1", checkedId).apply();
break;
case R.id.RB_time:
requestData("2");
AES256SharedPreferences.getInstance().edit().<Integer>putInt("1", checkedId).apply();
break;
default:
break;
}
}
RadioGroup 的改变状态监听方法就不贴了,在onCreated中
/*这里是给每个radiobutton重新ser一个ID,跟在XML里设置的一致就行*/
RB1.setId(R.id.RB_1);
RB2.setId(R.id.RB_2);
RB3.setId(R.id.RB_3);
//获取上面点击按钮存入的值
int s = AES256SharedPreferences.getInstance().getInt("1", 0);
/*进行依次对比,方法都在onCreated中*/
if (s == R.id.RB_1) {
RB1.setChecked(true);
}
if (s == R.id.RB_2) {
RB2.setChecked(true);
}
if (s == R.id.RB_3) {
RB3.setChecked(true);
}
这样就完成了,代码比较粗糙。但是功能实现了,各位大大如果有什么好的想法欢迎留言哈