根据我的理解,要确定一个复选框是否被“点击”并确定它是否被选中,可以使用如下代码:
cb=(CheckBox)findViewById(R.id.chkBox1);
cb.setOnCheckedChangeListener(this);
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
cb.setText("This checkbox is: checked");
}
else {
cb.setText("This checkbox is: unchecked");
}
}
但是,我无法弄清楚如何为广播组执行上述操作的逻辑。
这是我的 RadioGroup 的 xml:
<RadioGroup android:id="@+id/radioGroup1"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<RadioButton android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radio1" android:checked="true"
android:text="RadioButton1">
</RadioButton>
<RadioButton android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radio2" android:text="RadioButton2" android:checked="true">
</RadioButton>
<RadioButton android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radio3" android:text="RadioButton3">
</RadioButton>
</RadioGroup>
问题:我是否需要设置另一个监听器,或者已经存在的监听器是否也会“注册”这个组?
还有,监听器应该设置在RadioGroup还是RadioButton上?
这就是你如何获得选中的单选按钮:
// This will get the radiogroup
RadioGroup rGroup = (RadioGroup)findViewById(r.id.radioGroup1);
// This will get the radiobutton in the radiogroup that is checked
RadioButton checkedRadioButton = (RadioButton)rGroup.findViewById(rGroup.getCheckedRadioButtonId());
要使用侦听器,您可以这样做:
// This overrides the radiogroup onCheckListener
rGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
{
public void onCheckedChanged(RadioGroup group, int checkedId)
{
// This will get the radiobutton that has changed in its check state
RadioButton checkedRadioButton = (RadioButton)group.findViewById(checkedId);
// This puts the value (true/false) into the variable
boolean isChecked = checkedRadioButton.isChecked();
// If the radiobutton that has changed in check state is now checked...
if (isChecked)
{
// Changes the textview's text to "Checked: example radiobutton text"
tv.setText("Checked:" + checkedRadioButton.getText());
}
}
});
应该是这样的
RadioGroup rb = (RadioGroup) findViewById(R.id.radioGroup1);
rb.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId) {
}
}
});
根据 checkedId,你会知道哪个单选按钮被点击了,然后使用你上面的代码来确定它是被选中还是未被选中。这是作业。 ;)
使用 Switch 更好:
radGrp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup arg0, int id) {
switch (id) {
case -1:
Log.v(TAG, "Choices cleared!");
break;
case R.id.chRBtn:
Log.v(TAG, "Chose Chicken");
break;
case R.id.fishRBtn:
Log.v(TAG, "Chose Fish");
break;
case R.id.stkRBtn:
Log.v(TAG, "Chose Steak");
break;
default:
Log.v(TAG, "Huh?");
break;
}
}
});
//Within the Activity that hosts this layout, the following method handles the click event for both radio buttons:
public void onRadioButtonClicked(View view) {
// Is the button now checked?
boolean checked = ((RadioButton) view).isChecked();
// Check which radio button was clicked
switch(view.getId()) {
case R.id.radio_pirates:
if (checked)
// Pirates are the best
break;
case R.id.radio_ninjas:
if (checked)
// Ninjas rule
break;
}
}
如果您想查看在单选组中选中或选择了哪个单选按钮,请使用以下命令:
//1. declare the radio group and the radio Button in the java file.
RadioGroup radiobtn;
RadioButton radio;
Button btnClick;
//the radio is the element of the radiogroup which will assigned when we select the radio button
//Button to trigger the toast to show which radio button is selected of the radio group
//2. now define them in the java file
radiobtn = findViewById(R.id.radiobtn);
btnClick = findViewById(R.id.btnClick);
//we are instructing it to find the elements in the XML file using the id
//3. Now Create an on Click listener for the button
btnClick.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int selectedId = radiobtn.getCheckedRadioButtonId();
//we are defining the selectId and then we are fetching the id of the checked radio button using the function getCheckedRadioButton()
radio = findViewById(selectedId);
//now the radioButton object we have defined will come into play, we will assign the radio to the radio button of the fetched id of the radio group
Toast.makeText(MainActivity.this,radio.getText(),Toast.LENGTH_SHORT).show();
//we are using toast to display the selected id of the radio button
//radio.getText() will fetch the id of the radio Button of the radio group
}
});
我的 MainActivity.java
package com.example.endsempracmad;
import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
String selection;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActionBar actionBar = getSupportActionBar();
actionBar.setTitle("Home Activity");
RadioGroup radioGroup = findViewById(R.id.my_radio_group);
Button myButton = findViewById(R.id.button);
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Create an intent to start the new activity
Intent intent = new
Intent(MainActivity.this,SecondActivity.class);
int selectedId = radioGroup.getCheckedRadioButtonId();
if(selectedId != -1){
RadioButton selectedRadioButton = findViewById(selectedId);
selection = selectedRadioButton.getText().toString();
}
intent.putExtra("selection", selection);
startActivity(intent);
// Start the new activity
startActivity(intent);
}
});
//Toast.makeText(getApplicationContext(),"Hello Javatpoint",Toast.LENGTH_SHORT).show();
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="267dp"
android:layout_height="123dp"
android:layout_marginStart="45dp"
android:layout_marginTop="450dp"
android:layout_marginEnd="99dp"
android:layout_marginBottom="158dp"
android:text="Button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<RadioGroup
android:id="@+id/my_radio_group"
android:layout_width="166dp"
android:layout_height="248dp"
android:layout_marginStart="34dp"
android:layout_marginTop="129dp"
android:layout_marginEnd="211dp"
android:layout_marginBottom="354dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="69dp"
android:background="@drawable/messi"
android:text="Radio button 1" />
<RadioButton
android:layout_width="120dp"
android:layout_height="81dp"
android:background="@drawable/messi"
android:text="Radio button 2" />
<RadioButton
android:layout_width="123dp"
android:layout_height="84dp"
android:background="@drawable/messi"
android:text="Radio button 3" />
</RadioGroup>
</androidx.constraintlayout.widget.ConstraintLayout>
secondActivity.java
package com.example.endsempracmad;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
String selection = getIntent().getStringExtra("selection");
TextView textView = findViewById(R.id.textView);
textView.setText("Selected option: " + selection);
}
}
activity_second.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SecondActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
tools:layout_editor_absoluteX="212dp"
tools:layout_editor_absoluteY="113dp" />
</androidx.constraintlayout.widget.ConstraintLayout>