作者:mce | 来源:互联网 | 2023-10-12 09:42
如果某人选择了这些单选按钮之一,则即使用户开始另一个活动或应用程序关闭,它也应保持选中状态。使用下面实现的代码,在应用程序启动时,已经对“ miles.btn.setchecked(MilesButtonState)进行了miles_btn的检查。当我选择kmleight_btn并返回到活动时,在公里数已被设置的情况下,miles_btn仍然处于选中状态取消选择。
问题:如果用户选择了km-btn,如何保持它处于选中状态,而不是默认返回Miles_btn。
注意:如果我将km_btn.setchecked(KMbuttonState)移到miles_btn.setchecked(MilesButtonStates)下,则应用程序在应用程序启动时已选择kml_btn而不是Miles_btn。
顺便说一句,如果用户未进行选择,则默认情况下应选择km_btn,如下面的xml代码所示。
android:id="@+id/distance_btn_group"
android:layout_
android:layout_
android:layout_marginTop="5dp"
android:layout_marginEnd="35dp"
android:gravity="end"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
android:id="@+id/miles_btn"
android:layout_
android:layout_
android:text="Miles"
android:textColor="#ffff"
android:gravity="start"
android:paddingTop="30dp"
android:paddingStart="-30dp"
android:paddingEnd="35dp"
android:OnClick="buttonCheck"/>
android:id="@+id/kilometer_btn"
android:layout_
android:layout_
android:text="km"
android:textColor="#ffff"
android:gravity="start"
android:paddingTop="30dp"
android:paddingStart="-26dp"
android:checked="true"
android:paddingEnd="5dp"
android:OnClick="buttonCheck"/>
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
sharedPreferences = getSharedPreferences(Shared_info,Context.MODE_PRIVATE);
Boolean MilesButtOnState= sharedPreferences.getBoolean(MILESBTN,false);
sharedPreferences = getSharedPreferences(Shared_info,Context.MODE_PRIVATE);
Boolean KMButtOnState= sharedPreferences.getBoolean(KMBTN,false);
distancebtn_group = findViewById(R.id.distance_btn_group);
miles_btn = (RadioButton) findViewById(R.id.miles_btn);
kilometer_btn = (RadioButton) findViewById(R.id.kilometer_btn);
kilometer_btn.setChecked(KMButtonState);
miles_btn.setChecked(MilesButtonState);
kilometer_btn.setOnClicklistener(new View.OnClicklistener() {
@Override
public void onClick(View view) {
SharedPreferences.Editor editor = sharedPreferences.edit();
boolean kmChecked = kilometer_btn.isChecked();
editor.putBoolean(KMBTN,kmChecked);
editor.apply();
}
});
miles_btn.setOnClicklistener(new View.OnClicklistener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor editor = sharedPreferences.edit();
Boolean milesChecked = miles_btn.isChecked();
editor.putBoolean(MILESBTN,milesChecked);
editor.apply();
正确答案:这对我有用。...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
sharedPreferences = getSharedPreferences(Shared_info,MODE_PRIVATE);
distancebtn_group = findViewById(R.id.distance_btn_group);
miles_btn = (RadioButton) findViewById(R.id.miles_btn);
kilometer_btn = (RadioButton) findViewById(R.id.kilometer_btn);
kilometer_btn.setOnClicklistener(new View.OnClicklistener() {
@Override
public void onClick(View view) {
SharedPreferences.Editor editor = sharedPreferences.edit();
boolean kmChecked = kilometer_btn.isChecked();
editor.putBoolean(KMBTN,kmChecked);
editor.apply();
}
});
miles_btn.setOnClicklistener(new View.OnClicklistener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor editor = sharedPreferences.edit();
boolean milesChecked = miles_btn.isChecked();
editor.putBoolean(MILESBTN,milesChecked);
editor.apply();
}
});
SharedPreferences sharedPreferences = getSharedPreferences(Shared_info,MODE_PRIVATE);
kilometer_btn.setChecked(sharedPreferences.getBoolean("kilometer_btn",true));
miles_btn.setChecked(sharedPreferences.getBoolean("miles_btn",false));
}
}
您应将所有RadioButton
放入父RadioGroup
中,以允许一次选择。
...>
.../>
.../>
,
您的Java代码逻辑不正确。使用以下代码:
int selectedId = distancebtn_group.getCheckedRadioButtonId();
// find which radioButton is checked by id
if(selectedId == miles_btn.getId())
{
//your code logic for miles selection button
}
else if(selectedId == kilometer_btn.getId())
{
//your code logic for kilometer selection button
}
,
您的共享首选项使您看起来两个变量彼此独立,而我猜您正在使用它来决定用户选择了哪个选项,我想使用一个dependencies {
// ...
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
变量,它可以是布尔值例如,对于英里为true,对于公里为false,或者在示例中为字符串“ KM”和“ MILES”。
distanceChoice
当您要检查选择了哪一个时,可以使用它进行比较:
public String getDistanceChoice(){
sharedPreferences=getSharedPreferences(Shared_info,Context.MODE_PRIVATE);
return sharedPreferences.getString(distance_info,"KM");
}
public void setDistanceChoice(String distanceChoice) {
SharedPreferences.Editor sharedPrefsEditor = sharedPreferences.edit();
sharedPrefsEditor.putString(distance_info,distanceChoice);
sharedPrefsEditor.apply();
}