gpt4 book ai didi

java - 刚刚创建后更新注释

转载 作者:行者123 更新时间:2023-12-01 18:59:10 25 4
gpt4 key购买 nike

我目前正在开发一个遵循 MVVM 架构的笔记应用程序。有 2 项 Activity 。主要是笔记列表和允许用户查看笔记的查看模式。如果他们单击描述或标题,则会允许编辑模式,您可以在其中保存更改以及其他内容。创建新笔记时,它会将用户带到同一 Activity 来查看/编辑笔记,并启用具有空标题和说明的编辑模式。我目前遇到的问题是,如果用户创建一条注释并决定在创建后立即对其进行编辑,那么当用户返回到注释列表时,它会显示一堆注释,每个注释都包含他所做的每个更新,因此注释正在保存到新注释中,而不是更新现有注释。

保存注释的代码:

private void saveNote(){

//updates existing note. Next Statement adds new note
if(getIntent().hasExtra(EXTRA_ID)){
mViewTitle.setText(mEditTitle.getText().toString());
String timeStamp = Utility.getCurrentTimestamp();
timeStamp = timeStamp.replace("-", " ");

Note note = new Note(mTitle, mContent, timeStamp);
note.setId(mID);
mAddEditNoteViewModel.update(note);
Toast.makeText(this, "Note Updated", Toast.LENGTH_SHORT).show();
} else if(!getIntent().hasExtra(EXTRA_ID)){
mViewTitle.setText(mEditTitle.getText().toString());
String timeStamp = Utility.getCurrentTimestamp();
timeStamp = timeStamp.replace("-", " ");

Note note = new Note(mTitle, mContent, timeStamp);
mAddEditNoteViewModel.insert(note);
Toast.makeText(this, "New Note Created:", Toast.LENGTH_SHORT).show();
}
}

如您所见,我检查是否需要更新或创建新笔记的方法是检查 Intent 是否具有我需要的数据(在本例中为 ID)。但是,当用户刚刚创建笔记并且没有返回主 Activity 时,每次新创建的笔记更新而没有返回主 Activity 时,都会调用 else if 语句,从而创建一个新笔记。我似乎无法找到解决这个问题的方法。我想只在用户返回主 Activity 后保存新注释,但如果用户创建注释,单击复选标记图标(保存)并关闭应用程序而不返回主 Activity ,则该注释将不会被保存。已保存。我该如何解决这个问题?

最佳答案

如果我理解正确的话,您正在使用 EXTRA_ID 的存在来确定当前正在编辑的注释是否已存在。

但是 EXTRA_ID 的存在真正意味着 Activity 是通过加载现有 ID 的指令打开的。

因此,这不是两个等效的含义,您不应使用 EXTRA_ID 来测试是否保存新笔记。

有很多方法可以解决这个问题。我要做的是将 mID 更改为 mSavedNoteId 并使其成为可为空的 IntegerLong 而不是 >intlong。 (不确定您正在使用哪个。)让值为 null 表示您没有使用已保存的笔记。当 Activity 打开时,您可以根据 extra 分配 mSavedNoteId 的值,或者如果没有 extra,则将其保留为 null。仅在首次保存时创建 ID 号并将其分配给 mSavedNoteId。最后,您的 if 语句可以检查 mSavedNoteId 是否为 null,以确定是否应保存新笔记或更新现有笔记。

private void saveNote() {
mViewTitle.setText(mEditTitle.getText().toString());
String timeStamp = Utility.getCurrentTimestamp().replace("-", " ");
Note note = new Note(mTitle, mContent, timeStamp);
if (mSavedNoteId != null){
note.setId(mSavedNoteId);
mAddEditNoteViewModel.update(note);
Toast.makeText(this, "Note Updated", Toast.LENGTH_SHORT).show();
} else {
mSavedNoteId = generateNewNoteId(); // however you're doing it
note.setId(mSavedNoteId);
mAddEditNoteViewModel.insert(note);
Toast.makeText(this, "Note Updated", Toast.LENGTH_SHORT).show();
}
}

我想也许是您的 View 模型实现在您调用 insert() 时生成了一个 ID。在这种情况下,让 insert() 返回生成的 ID 并更改 else 分支,如下所示:

mSavedNoteId = mAddEditNoteViewModel.insert(note);
Toast.makeText(this, "Note Updated", Toast.LENGTH_SHORT).show();

关于java - 刚刚创建后更新注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59651903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com