Android开发 RadioButton使用中遇到的问题与解决方法
android开发 radiobutton使用中遇到的问题与解决方法
radiobutton(单选按钮)是安卓中常用的控件,作为单选按钮,单个设置则失去了意义,一般是在radiogroup中使用的。
在xml中设置如下:
那么如何监听单选的事件呢?
使用radiogroup.oncheckedchangelistener接口就可以做到,重写oncheckedchanged()方法。
public class mainactivity extends appcompatactivity implements radiogroup.oncheckedchangelistener{
我本来是打算做一个能够根据单选按钮的改变,来记录用户选择的数据信息,并且在下一次启动的时候,能够将数据载入进来的程序。
但是radiobutton的使用并非想象中的那么容易。
首先就是我用到了三组单选按钮组,总计九个单选按钮。在对单选按钮不熟悉的情况下,我在的时候误以为要详细地输入不同数据组的id,但实际上并不需要。
他会监听所有的id,并且知道哪些为一组。
输入的radiogroup和checkedid直接按默认填写,即可实现监听。并且监听得到的数据类型是int型。
@override public void oncheckedchanged(radiogroup radiogroup, int checkedid) { }
另外还有的麻烦就是使用radiobuttoon的时候。因为我对于其监听机制并不明白。所以在使用sharedpreferences的方式进行数据存储的时候,我一开始的设想是:
通过radiobutton的监听来,记录用户的选择。并且通过设置一个“存储”按钮(button)控件,来实现点击button的瞬间完成对于数据的写入。
但是实际上失败了,点击button控件之后并不能写入数据。于是我通过toast控件在关键的步骤输出信息,最后通过推测发现:
只有在点击单选按钮,调用了oncheckedchanged监听方法的时候才会产生一个checkedid值。
而其余时间,这个checkedid的值都是不存在的
所以如果要实现用户对单选按钮存储的信息的话,可以在单选按钮的监听方法中加入数据存储的语句。
而我一开始以为:“只要选中之后,无论何时都能得到选中的键的id”的这个想法,是错的!
最后附上我mainactivity的代码:
package com.example.lab4_project1; import android.content.sharedpreferences; import android.graphics.color; import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.view.view; import android.widget.button; import android.widget.radiobutton; import android.widget.radiogroup; import android.widget.relativelayout; import android.widget.textview; import android.widget.toast; public class mainactivity extends appcompatactivity implements radiogroup.oncheckedchangelistener,view.onclicklistener { private textview textview; private textview textview2; private textview textview3; private button button2; private radiogroup backgroundcolour; private radiogroup textsize; private radiogroup textcolour; private radiobutton radiobutton; private radiobutton radiobutton2; private radiobutton radiobutton3; private radiobutton radiobutton4; private radiobutton radiobutton5; private radiobutton radiobutton6; private radiobutton radiobutton7; private radiobutton radiobutton8; private radiobutton radiobutton9; private relativelayout mylayout; private string data; private string data2; private string data3; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); initview(); initdata(); } private void initview(){ mylayout = (relativelayout) findviewbyid(r.id.activity_main); button2=(button)findviewbyid(r.id.button2); button2.setonclicklistener(this); textview=(textview)findviewbyid(r.id.testline); textview2=(textview)findviewbyid(r.id.testline2); textview3=(textview)findviewbyid(r.id.testline3); radiobutton=(radiobutton)findviewbyid(r.id.radiobutton); radiobutton2=(radiobutton)findviewbyid(r.id.radiobutton2); radiobutton3=(radiobutton)findviewbyid(r.id.radiobutton3); radiobutton4=(radiobutton)findviewbyid(r.id.radiobutton4); radiobutton5=(radiobutton)findviewbyid(r.id.radiobutton5); radiobutton6=(radiobutton)findviewbyid(r.id.radiobutton6); radiobutton7=(radiobutton)findviewbyid(r.id.radiobutton7); radiobutton8=(radiobutton)findviewbyid(r.id.radiobutton8); radiobutton9=(radiobutton)findviewbyid(r.id.radiobutton9); backgroundcolour=(radiogroup)findviewbyid(r.id.radiogroup); textsize=(radiogroup)findviewbyid(r.id.radiogroup2); textcolour=(radiogroup)findviewbyid(r.id.radiogroup3); backgroundcolour.setoncheckedchangelistener(this); textsize.setoncheckedchangelistener(this); textcolour.setoncheckedchangelistener(this); } public void initdata(){ //创建一个接口对象 sharedpreferences read=getsharedpreferences("user",mode_private); //获取文件中的值 string databc=read.getstring("data1",""); string datats=read.getstring("data2",""); string datatc=read.getstring("data3",""); //以上 if(databc.equals("")&&datats.equals("")&&datatc.equals("")) { toast.maketext(this, "抱歉没有数据", toast.length_long).show(); }else{ if(datatc=="红色"){ textview.settextcolor(color.red); textview2.settextcolor(color.red); textview3.settextcolor(color.red); radiobutton7.setchecked(true); } if(datatc=="黄色"){ textview.settextcolor(color.yellow); textview2.settextcolor(color.yellow); textview3.settextcolor(color.yellow); radiobutton8.setchecked(true); } if(datatc=="蓝色"){ textview.settextcolor(color.blue); textview2.settextcolor(color.blue); textview3.settextcolor(color.blue); radiobutton9.setchecked(true); } if(databc=="红色"){ mylayout.setbackgroundcolor(color.red); radiobutton.setchecked(true); } if(databc=="黄色"){ mylayout.setbackgroundcolor(color.yellow); radiobutton2.setchecked(true); } if(databc=="蓝色"){ mylayout.setbackgroundcolor(color.blue); radiobutton3.setchecked(true); } if(datats=="小"){ textview.settextsize(10); textview2.settextsize(10); textview3.settextsize(10); radiobutton4.setchecked(true); } if(datats=="中"){ textview.settextsize(15); textview2.settextsize(15); textview3.settextsize(15); radiobutton5.setchecked(true); } if(datats=="大"){ textview.settextsize(20); textview2.settextsize(20); textview3.settextsize(20); radiobutton6.setchecked(true); } toast.maketext(this,"你使用了sharedpreferences存储了数据",toast.length_long).show(); } } @override public void oncheckedchanged(radiogroup radiogroup, int checkedid) { sharedpreferences.editor editor=getsharedpreferences("user",mode_private).edit(); switch (checkedid){ case r.id.radiobutton: data="红色"; editor.putstring("data1",data); editor.commit(); toast.maketext(this,"你选择的是红色",toast.length_short).show(); break; case r.id.radiobutton2: data = "黄色"; editor.putstring("data1",data); editor.commit(); toast.maketext(this,"你选择的是黄色",toast.length_short).show(); break; case r.id.radiobutton3: data="蓝色"; editor.putstring("data1",data); editor.commit(); toast.maketext(this,"你选择的是蓝色",toast.length_short).show(); break; case r.id.radiobutton4: data2="小"; editor.putstring("data2",data2); editor.commit(); toast.maketext(this,"你选择的是小",toast.length_short).show(); break; case r.id.radiobutton5: data2="中"; editor.putstring("data2",data2); editor.commit(); toast.maketext(this,"你选择的是中",toast.length_short).show(); break; case r.id.radiobutton6: data2 = "大"; editor.putstring("data2",data2); editor.commit(); toast.maketext(this,"你选择的是大",toast.length_short).show(); break; case r.id.radiobutton7: data3="红色"; editor.putstring("data3",data3); editor.commit(); toast.maketext(this,"你选择的是红色",toast.length_short).show(); break; case r.id.radiobutton8: data3="黄色"; editor.putstring("data3",data3); editor.commit(); toast.maketext(this,"你选择的是黄色",toast.length_short).show(); break; case r.id.radiobutton9: data3="蓝色"; editor.putstring("data3",data3); editor.commit(); toast.maketext(this,"你选择的是蓝色",toast.length_short).show(); break; } } @override public void onclick(view view){ switch (view.getid()){ case r.id.button2: sharedpreferences.editor editor=getsharedpreferences("user",mode_private).edit(); editor.clear(); editor.commit(); toast.maketext(this,"你清除了sharedpreferences中的所有数据",toast.length_short).show(); break; } } }
关于理论和术语的描述,我应当存在着相当的不足,欢迎指正。
推荐阅读
-
Android 使用volley过程中遇到的问题解决办法
-
android开发环境遇到adt无法启动的问题分析及解决方法
-
使用vue-router与v-if实现tab切换遇到的问题及解决方法
-
在android开发中尽量不要使用中文路径的问题详解
-
Android 使用volley过程中遇到的问题解决办法
-
html5的input的required使用中遇到的问题及解决方法
-
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
-
ubuntu14.04 使用中遇到的问题及解决方法集锦
-
jQuery中ajax的使用与缓存问题的解决方法
-
Android开发 RadioButton使用中遇到的问题与解决方法