欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android开发 RadioButton使用中遇到的问题与解决方法

程序员文章站 2022-05-17 23:38:08
android开发 radiobutton使用中遇到的问题与解决方法 radiobutton(单选按钮)是安卓中常用的控件,作为单选按钮,单个设置则失去了意义,一般是在radiogroup中使用的。...

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;
  }
 }
}

关于理论和术语的描述,我应当存在着相当的不足,欢迎指正。