Android开发:如何按条目位置为同一EditText存储独立文本内容
问题根因
当前所有影视条目的观感内容,都存在SharedPreferences下固定名为content的键里,不管选中哪个position的条目,保存和读取都操作同一个键值对,自然会出现不同页面内容串改、同步的问题。
修复方案
给每个列表条目绑定专属独立的存储键名,用从Intent拿到的position区分不同条目,每个条目的内容存在对应独立的键下,就不会互相覆盖。
具体代码修改(仅需调整详情页anime_details代码)
- 新增成员变量存储当前条目的专属存储键
// 当前条目对应的SharedPreferences存储key private String currentSpKey;
- 在
onCreate方法获取到position后,初始化专属key
在position = b2.getInt("position",0);代码后新增:
// 用position拼接唯一key,不同position对应独立存储位置 currentSpKey = "anime_content_" + position;
- 修改保存、读取逻辑的key,替换原有固定的
content键
修改后的保存方法:
public void saveText(View v){ spe = sp.edit(); spe.putString(currentSpKey, contentText.getEditableText().toString()); spe.apply(); // 用apply替代commit,异步写入不阻塞主线程,性能更优 }
修改后的读取方法:
public void retrieveText(View v){ contentText.setText(sp.getString(currentSpKey,"")); }
可选体验优化
如果需要进入详情页时自动加载之前保存过的观感,不需要用户手动点取回按钮,可以在onCreate方法里给控件赋值完海报、标题后,直接加一行读取逻辑:
// 进入页面自动加载已存内容 contentText.setText(sp.getString(currentSpKey,""));
进阶注意事项
如果后续你的影视列表会做排序、新增/删除条目的操作,列表position会发生变化,单纯用position当key会出现内容和影视条目标题/海报错位的问题。这种场景建议给每个影视条目配置全局唯一的固定id,通过Intent把条目id传到详情页,用id拼接存储key即可避免错位,固定顺序的列表用position做标识完全够用。
内容的提问来源于stack exchange,提问作者Ivy
相关产品推荐
相关产品推荐

