求助:如何将Spinner选项存入SharedPreferences并重启后读取到TextView
看起来你遇到的问题主要集中在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
相关产品推荐
相关产品推荐

