单选按钮(RadioButton)——Mars Android开发视频教程之第一季第十集(重)

故事扮演 提交于 2019-12-07 13:45:15

##1· 什么是单选按钮(RadioButton)? 这样的按钮就叫单选按钮,这里有两组单选按钮; 一组单选按钮中,只能有一个选项被选中;

##2· RadioGroup与RadioButton RadioGroup代表组;RadioButton代表单选按钮项;

##3· 单选按钮的使用

<RadioGroup>包围<RadioButton>,一对<RadioGroup/>代表一组单选按钮。

首先在布局文件中添加一对组标签:

    <RadioGroup
        android:id="@+id/radioGroup1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"><!-- 选项的排列方向 -->
        
    </RadioGroup>

然后在组标签中添加子标签:

    <RadioGroup
        android:id="@+id/radioGroup1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        
        <RadioButton 
            android:id="@+id/radioButton_A"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="A"/>
        
        <RadioButton 
            android:id="@+id/radioButton_B"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="B"/>
        
    </RadioGroup>

这样就成功声明了一组单选按钮。

接着在java代码中获取对应的对象

先声明成员变量:

	private RadioGroup radioGroup;
	private RadioButton radioButton_A;
	private RadioButton radioButton_B;

然后找到它们:

        radioGroup = (RadioGroup) findViewById(R.id.radioGroup1);
        radioButton_A = (RadioButton) findViewById(R.id.radioButton_A);
        radioButton_B = (RadioButton) findViewById(R.id.radioButton_B);

###3.1 单选按钮的监听 我们想知道用户点击的是哪一个选项,所以最后就需要对其进行监听。

首先创建监听类 这里要注意,如果对组进行监听,那么就得导入RadioGourp包中的接口OnCheckedChangeListener:

    class RadioGroupCheckedChangeListener implements OnCheckedChangeListener{

		public void onCheckedChanged(RadioGroup group, int checkedId) {
			
		}
    	
    }

最后生成监听类对象,将监听器挂接在RadioGroup对象上:

        RadioGroupCheckedChangeListener raidoListener = new RadioGroupCheckedChangeListener();
        radioGroup.setOnCheckedChangeListener(raidoListener);

这样,radioGroup组中的任意选项状态改变时,就会调用onCheckedChanged(RadioGroup group, int checkedId)方法。

  • group代表状态改变的选项所在组。
  • checkedId代表状态改变的选项ID。

现在我们可以写一些打印语句。 例如,打印状态改变按钮的内容。那么我们要在onCheckedChanged方法中进行实现:

		public void onCheckedChanged(RadioGroup group, int checkedId) {
			if(checkedId == radioButton_A.getId()){
				System.out.println("A");
			} else if(checkedId == radioButton_B.getId()) {
				System.out.println("B");
			}
		}

除了对组进行监听之外,我们还可以给单独一个项进行监听:

定义一个监听类,注意,这里实现的onCheckedChangeListener接口是CompoundButton包中的接口:

    class RadioButtonCheckedChangeListener implements CompoundButton.OnCheckedChangeListener{

		public void onCheckedChanged(CompoundButton button, boolean isChecked) {
			
		}
    	
    }

接着,创建监听类对象,然后将监听器挂接在要监听的RadioButton对象上:

        RadioButtonCheckedChangeListener  radiotButtonListener = new RadioButtonCheckedChangeListener();
        radioButton_A.setOnCheckedChangeListener(radiotButtonListener);

这样,当这个对象的状态改变时就会调用onCheckedChanged(CompoundButton button, boolean isChecked)方法

  • button是被监听的RadioButton对象;
  • isChecked为是否选中。

写个打印语句来测试一下,显示被监听按钮的状态:

		public void onCheckedChanged(CompoundButton button, boolean isChecked) {
			if(isChecked){
				System.out.println(button.getText() + "被选中了");
			} else {
				System.out.println(button.getText() + "没有被选中");
			}
		}

##4· 疑问 我就在想,单独监听一个单选按钮有什么用呢? 无非就是,知道这个按钮是处于选中还是未选中状态而已嘛。 而这通过组监听也完全能实现啊,当选中的项不是目标项时,就代表它未选中,反之亦然。

##5· 总结

  • 单选按钮由组(RadioGroup)和项(RadioButton)所构成;
  • 使用的时候,先添加组标签,然后再往里面添加子标签;
  • 一组单选按钮中只能存在一个选中项;
  • 监听组(RadioGroup)使用监听器RadioGroup.OnCheckedChangeListener;
  • 监听单独一个项使用CompoundButton.OnCheckedChangeListener

##6· 练习 实现: 两组单选按钮 1:A、B 2:C、D 点击A的时候C也被选中;点击B的时候也被D选中。

实现:

		public void onCheckedChanged(RadioGroup group, int checkedId) {
			if(checkedId == radioButton_A.getId()){
				radioButton_C.setChecked(true);
			} else if(checkedId == radioButton_B.getId()) {
				radioButton_D.setChecked(true);
			}
		}

这个练习的用意应该是让我们知道setChecked()这个方法的作用吧。

完毕

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!