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

求助:如何将Spinner选项存入SharedPreferences并重启后读取到TextView

解决Spinner选择项保存到SharedPreferences并重启后恢复的问题

看起来你遇到的问题主要集中在AlertDialog确定按钮的事件绑定以及SharedPreferences的正确读写上,我来一步步帮你解决:

第一步:完善AlertDialog逻辑,在确定按钮点击时保存选择

首先要确保在AlertDialog的确定按钮触发时,正确获取Spinner选中的内容并写入SharedPreferences。我补全并优化你的代码片段:

mShowDialog = (Button) findViewById(R.id.btnEscolhaCidade);
mShowDialog.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        // 加载包含Spinner的弹窗布局(假设你已创建dialog_spinner.xml布局文件)
        View dialogView = LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog_spinner, null);
        Spinner mSpinner = dialogView.findViewById(R.id.spinner_cidade);

        // 给Spinner设置适配器(替换成你自己的城市数据源)
        ArrayAdapter<String> cityAdapter = new ArrayAdapter<>(MainActivity.this,
                android.R.layout.simple_spinner_item, new String[]{"北京", "上海", "广州", "深圳"});
        cityAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        mSpinner.setAdapter(cityAdapter);

        // 构建并显示AlertDialog
        AlertDialog.Builder mBuilder = new AlertDialog.Builder(MainActivity.this);
        mBuilder.setTitle("选择城市")
                .setView(dialogView)
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        // 核心:获取Spinner当前选中的项
                        String selectedCity = mSpinner.getSelectedItem().toString();

                        // 写入SharedPreferences
                        SharedPreferences sharedPref = getSharedPreferences("CityPrefs", MODE_PRIVATE);
                        SharedPreferences.Editor editor = sharedPref.edit();
                        editor.putString("selected_city", selectedCity);
                        // 务必调用提交方法,否则数据不会被写入!
                        editor.apply(); // 异步提交更推荐,也可以用同步的commit()

                        Toast.makeText(MainActivity.this, "选择已保存", Toast.LENGTH_SHORT).show();
                    }
                })
                .setNegativeButton("取消", null)
                .show();
    }
});

第二步:在应用启动时读取数据并显示到TextView

在Activity的onCreate方法中添加读取逻辑,将保存的城市信息显示到目标TextView:

TextView mSelectedCityTv = findViewById(R.id.tv_selected_city);

// 读取SharedPreferences中的保存值
SharedPreferences sharedPref = getSharedPreferences("CityPrefs", MODE_PRIVATE);
// 第二个参数是默认值,当没有保存数据时显示该内容
String savedCity = sharedPref.getString("selected_city", "未选择城市");

// 将读取到的内容设置到TextView
mSelectedCityTv.setText(savedCity);

常见问题排查

如果还是无法正常保存/读取,检查以下几点:

  • 确认Spinner的布局id和代码中引用的id完全一致,避免空指针
  • 确保SharedPreferences的名称(比如示例中的"CityPrefs")在读写时完全相同
  • 检查Spinner的适配器是否正确设置,确保能正常选择选项
  • 确认没有遗漏editor.apply()或editor.commit()这一步,这是很多新手容易忽略的关键点

这样修改后,点击确定按钮就能保存选择,重启应用后TextView会自动显示之前保存的城市选项啦。

内容的提问来源于stack exchange,提问作者Dennis muroni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:23:16