0

我试着做一个简单的笔记。在我点击添加新笔记中的保存后,它们保存为 2 条笔记相同的内容。这意味着他们节省了 2 倍。我不知道为什么。

在 noteadapter 类中创建注释:

    public long createNote(String title, String body, String date) {
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_TITLE, title);
    initialValues.put(KEY_BODY, body);
    initialValues.put(KEY_DATE, date);

    return mDb.insert(DATABASE_TABLE, null, initialValues);
}

在 notelist 类中调用 create note:

    private void createNote() {
    Intent i = new Intent(this, NoteEdit.class);
    startActivityForResult(i, ACTIVITY_CREATE);    

和 noteedit 类中的事件以添加编辑或删除注释:

    mRowId = (savedInstanceState == null) ? null :
        (Long) savedInstanceState.getSerializable(NotesDbAdapter.KEY_ROWID);
    if (mRowId == null) {
        Bundle extras = getIntent().getExtras();
        mRowId = extras != null ? extras.getLong(NotesDbAdapter.KEY_ROWID)
                                : null;
    }

    populateFields();

}

    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.menu_about:
        case R.id.menu_delete:
            if(note != null){
                note.close();
                note = null;
            }
            if(mRowId != null){
                mDbHelper.deleteNote(mRowId);
            }
            finish();

            return true;
        case R.id.menu_save:
            saveState();
            finish();           
        default:
            return super.onOptionsItemSelected(item);
        }
    }

    private void saveState() {
        String title = mTitleText.getText().toString();
        String body = mBodyText.getText().toString();

        if(mRowId == null){
            mDbHelper.createNote(title, body, curDate);
        }else{
            mDbHelper.updateNote(mRowId, title, body, curDate);
        }
    }


    private void populateFields() {
        if (mRowId != null) {
            note = mDbHelper.fetchNote(mRowId);
            startManagingCursor(note);
            mTitleText.setText(note.getString(
                    note.getColumnIndexOrThrow(NotesDbAdapter.KEY_TITLE)));
            mBodyText.setText(note.getString(
                    note.getColumnIndexOrThrow(NotesDbAdapter.KEY_BODY)));
            curText = note.getString(
                    note.getColumnIndexOrThrow(NotesDbAdapter.KEY_BODY));
        }
    }

当我尝试获取rowID时,这里可能有问题:

mRowId = (savedInstanceState == null) ? null :
        (Long) savedInstanceState.getSerializable(NotesDbAdapter.KEY_ROWID);
    if (mRowId == null) {
        Bundle extras = getIntent().getExtras();
        mRowId = extras != null ? extras.getLong(NotesDbAdapter.KEY_ROWID)
                                : null;
    }

我的完整代码在这里:

http://www.mediafire.com/download/w1kyy7spc522za9/Notepad.zip

4

1 回答 1

0

在你onOptionsItemSelected()打电话saveState()来保存笔记,然后保存finish()活动。(您可能应该return true;在那之后停止进一步处理选项项选择,但这不是问题所在。)当活动完成时,它会进入暂停状态。在你的onPause()你再次打电话saveState()。您在定义saveState()时更新条目,但您仅将其设置在 中,从而在数据库中创建一个新行。mRowIdonCreate()

解决方案是在第一次插入时捕获插入的行 id 并存储它,以便稍后调用以saveState()更新行。您的 db 助手createNote()已经返回了您未存储的行 ID。

于 2013-09-15T19:24:17.813 回答