求助:如何判断RadioGroup的oncheckedChanged()是由用户触发还是系统触发的

vviking 2013-08-21 02:27:22
package com.example.radiobuttontest;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.view.Menu;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;

public class MainActivity extends Activity implements OnCheckedChangeListener {

private RadioGroup group;
// private boolean needReset = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
group =(RadioGroup) findViewById(R.id.radiogroup);
group.setOnCheckedChangeListener(this);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
protected void onResume() {
super.onResume();
// needReset = false;
group.check(R.id.btn1);
}

@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// needReset = true;
new AlertDialog.Builder(this).setMessage("Reset?").setNegativeButton("ok", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
//reset Data
}
}).setPositiveButton("cancel", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
}).create().show();
}
}

两种情况:
1.当用户切换radioButton时,需要弹出dialog告知用户是否reset数据。
2.在调用onResume(),预设group.check(R.id.btn1)时,是不需要弹出dailog的。

但在这两种情况下,都会调用onCheckedChanged(),无法在其中判断什么时候该弹dialog,什么时候不弹。
求高手解救!怎么判断onCheckedChanged()是由用户操作回调的,还是group.check()回调的!!!
...全文
456 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
vviking 2013-08-28
  • 打赏
  • 举报
回复
引用 2 楼 jiayangcg 的回复:
[quote=引用 1 楼 jiayangcg 的回复:] 无法正面回答楼主的问题。说一种解决方案吧:可以搞一个boolean变量,在onResume中赋ture,在onCheckedChanged中检查,如为true则赋成false然后什么也不干返回,为false则弹dialog。
我擦,楼主在代码中已经这样搞了。不好意思开始没看代码,当我没说。[/quote] 抱歉,操作失误,我在帖子里回复你了。虽然没帮到,但还是谢谢!
vviking 2013-08-26
  • 打赏
  • 举报
回复
呵呵,这种方法我尝试过,但是失败的。因为,当group.check()后,系统会调用两次onCheckedChanged()方法(没研究为什么会调用两次),所以用一个外部变量时,虽然系统第一次调用onCheckedChanged()中,可以判断这个外部变量做不同操作,但由于做完操作以后需要将外部变量恢复初始值,于是系统紧接着的第二次调用onCheckedChanged()中,变量被恢复初始值了,所以还是走弹出dialog的操作。 我找到另一种方法,定义checked button的状态变量mCurrentChecked,存到数据库中。onCreate()时,从数据库中读出mCurrentChecked的状态,在onResume()中,group.check(mCurrentChecked)。 此时在onCheckedChanged()中判断,if(checkedId==mCurrentChecked){则说明是通过group.check()触发}else{用户触发-->Reset Data}。即使用户触发的radiobuttonId == mCurrendChecked也没关系,因为checkedbutton没有发生改变,data不需要reset,本就应该走前者的case。
jiayangcg 2013-08-21
  • 打赏
  • 举报
回复
引用 1 楼 jiayangcg 的回复:
无法正面回答楼主的问题。说一种解决方案吧:可以搞一个boolean变量,在onResume中赋ture,在onCheckedChanged中检查,如为true则赋成false然后什么也不干返回,为false则弹dialog。
我擦,楼主在代码中已经这样搞了。不好意思开始没看代码,当我没说。
jiayangcg 2013-08-21
  • 打赏
  • 举报
回复
无法正面回答楼主的问题。说一种解决方案吧:可以搞一个boolean变量,在onResume中赋ture,在onCheckedChanged中检查,如为true则赋成false然后什么也不干返回,为false则弹dialog。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧