Android货币选择弹窗单选按钮选中状态持久化问题求助
解决Android弹窗单选按钮状态持久化问题
嘿,我来帮你搞定这个保存用户货币选择状态的问题!核心思路就是用SharedPreferences来持久化选中的选项,下次打开弹窗时读取这个值并设置为默认选中项。下面是优化后的代码和修改说明:
修改后的 CurrencyChoiceDialog.java
import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; import android.widget.Toast; public class CurrencyChoiceDialog extends DialogFragment { final CharSequence[] currencies = {"CAD", "USD", "EURO", "POUNDS"}; String selectedCurrency; public int selectedElement; // 不再默认设为-1,改为从SP读取 @Override @NonNull public Dialog onCreateDialog(Bundle savedInstance){ // 第一步:从SharedPreferences读取上次保存的选中索引 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); selectedElement = prefs.getInt("selected_currency_index", 0); // 默认选中第一个选项(CAD) AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle("Choose the default currency") // 设置单选框的默认选中项为读取到的索引 .setSingleChoiceItems(currencies, selectedElement, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { // 简化逻辑:不需要冗余的switch,直接赋值即可 selectedCurrency = (String) currencies[i]; selectedElement = i; } }) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { // 第二步:点击OK时保存选中状态到SharedPreferences SharedPreferences.Editor editor = prefs.edit(); editor.putInt("selected_currency_index", selectedElement); editor.putString("selected_currency", selectedCurrency); editor.apply(); // 修复Toast不显示的问题:加上.show() Toast.makeText(getActivity(), "The chosen currency is: "+ selectedCurrency, Toast.LENGTH_LONG).show(); } }); return builder.create(); } }
关键修改点说明
- 读取保存的状态:在弹窗创建时,通过
PreferenceManager.getDefaultSharedPreferences获取全局偏好设置,读取之前保存的选中索引(如果是第一次打开,默认选中第0项即CAD)。 - 简化单选点击逻辑:原来的switch语句完全冗余,每个case的操作都一样,直接一行代码完成赋值即可。
- 保存选中状态:点击OK按钮时,将选中的索引和货币值都保存到SharedPreferences,方便后续其他页面获取选中的货币。
- 修复Toast不显示:原来的Toast代码缺少
.show()方法,导致不会弹出提示,现在补上。
这样修改后,用户每次选择货币并点击OK,状态都会被持久化保存,下次打开弹窗时就会自动选中上次的选项啦!
内容的提问来源于stack exchange,提问作者DiabolicalTitan
相关产品推荐
相关产品推荐

