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

Android Studio开发笔记APP 重复生成次级欢迎笔记问题求助

问题修复方案

你代码里存在两处逻辑错误,分别对应两个异常现象:

1. 新建笔记时出现多余次级页面

在悬浮按钮的点击事件中,你额外调用了setContentView(R.layout.activity_note_editor),这行代码会直接在当前MainActivity的视图层级上加载编辑页布局,之后你又通过Intent启动了独立的NoteEditorActivity,最终导致两层编辑界面叠加,出现多余的无效次级页面。

修复方式:直接删除点击回调里的这行多余setContentView调用即可,启动新Activity不需要提前在当前页面加载目标页布局。


2. 默认欢迎笔记重复生成

这个问题的核心原因是首次启动时添加完默认欢迎笔记后,没有将数据持久化写入SharedPreferences:

  • 当set == null判断为首次启动时,你只把欢迎笔记加到了内存里的notes集合,没有同步写入SharedPreferences,下次App启动时读取到的notes还是null,会再次触发欢迎笔记添加逻辑。
  • 另外你没有在判断set是否为空之前初始化notes集合,如果notes之前已经存过其他值,也可能出现重复累加数据的问题。

修复后核心代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    FloatingActionButton fab = findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // 已移除多余的setContentView调用
            Intent intent = new Intent(getApplicationContext(), NoteEditorActivity.class);
            startActivity(intent);
        }
    });
    ListView listView = findViewById(R.id.listView);
    SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("com.echodev.Notes", Context.MODE_PRIVATE);
    HashSet<String> set = (HashSet<String>) sharedPreferences.getStringSet("notes", null);

    // 先初始化空集合,避免空指针和旧数据干扰
    notes = new ArrayList<>();
    if (set == null) {
        // 首次启动添加默认欢迎笔记
        notes.add("Welcome To Notes!!!!!");
        // 立刻将默认笔记写入SharedPreferences,标记已初始化
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putStringSet("notes", new HashSet<>(notes));
        editor.apply();
    } else {
        // 已有历史数据时直接加载
        notes.addAll(set);
    }

    // 后续补充ListView适配器绑定逻辑,注意所有笔记增删改操作后都要同步更新SharedPreferences存储
}

额外注意点

  • 不要直接修改从SharedPreferences取出的StringSet对象,部分Android版本中这个对象是SharedPreferences的内部引用,直接修改会导致数据不一致,转存到ArrayList后操作更安全。
  • 每次对笔记做增、删、改操作后,都要把最新的notes集合转成HashSet写回SharedPreferences,否则重启App后数据会丢失。

内容的提问来源于stack exchange,提问作者Culann Brown

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:36:21