You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:25:32