• 记事本3


    记事本3

    fangyukuan

    2010-4-9

     

    完善第二个例子。学习目标:

    l事件生命周期

    l维持应用程序状态

     

    1)NoteEdit

    在onCreate删除以下代码。即我们不再需要从意图取得标题和内容,我们只需要从意图取得行ID就行了。然后用行的ID去数据取,标题和内容。

    String title = extras.getString(NotesDbAdapter.KEY_TITLE);

    String body = extras.getString(NotesDbAdapter.KEY_BODY);

     

    if (title != null)

    {

        mTitleText.setText(title);

    }

    if (body != null)

    {

        mBodyText.setText(body);

    }

     

    NoteEdit 类加数据成员

    private NotesDbAdapter mDbHelper;

     

    onCreatesuper.onCreate()后面加以下代码,因为我们要用到数据库。

    mDbHelper = new NotesDbAdapter(this);

    mDbHelper.open();

     

    confirmButton.setOnClickListener()之前调用()方法。

     

    NoteEdit 类加方法populateFields

        // 根据行号从数据库取标题和内容

        private void populateFields()

        {

            if (null != mRowId)

            {

                Cursor note = mDbHelper.fetchNote(mRowId);

                startManagingCursor(note);

                mTitleText.setText(note.getString(note.getColumnIndexOrThrow(NotesDbAdapter.KEY_TITLE)));

                mBodyText.setText(note.getString(note.getColumnIndexOrThrow(NotesDbAdapter.KEY_BODY)));

            }

        }

     

    因为我们在点击确定的时候,不再需要返回结果,所以我们把onClick的代码做相应修改:

     

                public void onClick(View view)

                {

                    Bundle bundle = new Bundle();

     

                    bundle.putString(NotesDbAdapter.KEY_TITLE, mTitleText.getText()

                            .toString());

                    bundle.putString(NotesDbAdapter.KEY_BODY, mBodyText.getText()

                            .toString());

                    if (mRowId != null)

                    {

                        bundle.putLong(NotesDbAdapter.KEY_ROWID, mRowId);

                    }

     

                    Intent mIntent = new Intent();

                    mIntent.putExtras(bundle);

                    setResult(RESULT_OK, mIntent);

                    finish();

                }

     

    改成:

                public void onClick(View view)

                {

                    setResult(RESULT_OK);

                    finish();

                }

     

     

    重写三个方法onSaveInstanceState(), onPause() and onResume()

        // Activity在恢复之前被杀掉时,Android会调用这个方法。

        // 所以我们可以在这里保存一些信息,以使下次重新启动时恢复到现在的状态

        // 参数outState onCreate的参数savedInstanceState是一样的

        @Override

        protected void onSaveInstanceState(Bundle outState)

        {

            super.onSaveInstanceState(outState);

            outState.putLong(NotesDbAdapter.KEY_ROWID, mRowId);

        }

     

        // Activity结束时onPause会被调用(比如说finish方法调用时)

        // 很多时候我们可以在这里释放资源

        // 我们在这里把数据保存到数据库里

        @Override

        protected void onPause()

        {

            super.onPause();

            saveState();

        }

     

        // 这个就是Activity恢复的时候会被调用

        @Override

        protected void onResume()

        {

            super.onResume();

            populateFields();

        }

     

     

    2)Notepadv3

    因为记事本的存取我们都在NoteEdit 里做了。所以在onActivityResult里我们只需要更新一下视图的数据。而不用再做其它的事。所以把数据库相关的操作删除掉。

        @Override

        protected void onActivityResult(int requestCode, int resultCode,

                Intent intent)

        {

            super.onActivityResult(requestCode, resultCode, intent);

            fillData();

        }

     

    删除方法onListItemClick以下代码。当点击某一列时,我们只需要把行ID,放进意图里。不再需要把标题和内容也放进去。因为用行ID可以在数据查找到标题和内容。

    Cursor c = mNotesCursor;

    c.moveToPosition(position);

     

    i.putExtra(NotesDbAdapter.KEY_TITLE, c.getString(c

                    .getColumnIndexOrThrow(NotesDbAdapter.KEY_TITLE)));

    i.putExtra(NotesDbAdapter.KEY_BODY, c.getString(c

                    .getColumnIndexOrThrow(NotesDbAdapter.KEY_BODY)));

    修改之后:

        @Override

        protected void onListItemClick(ListView l, View v, int position, long id)

        {

            super.onListItemClick(l, v, position, id);

            Intent i = new Intent(this, NoteEdit.class);

            i.putExtra(NotesDbAdapter.KEY_ROWID, id);

            startActivityForResult(i, ACTIVITY_EDIT);

        }

     

    修改方法fillData以下代码:

    mNotesCursor = mDbHelper.fetchAllNotes();

     

    mNotesCursor改成局部变量。当然相应的mNotesCursor也得改成局部变量notesCursor(记得把mNotesCursor定义也删除掉)

    Cursor notesCursor = mDbHelper.fetchAllNotes();

     http://www.cnblogs.com/fangyukuan/archive/2010/04/09/1704849.html



     

  • 相关阅读:
    1774:大逃杀
    Angular实现简单数据计算与删除
    IDEA 如何搭建maven 安装、下载、配置(图文)
    win10 Java JDK环境变量配置
    Nginx学习使用
    ASP.NET Core中返回 json 数据首字母大小写问题
    mysql使用遇到的问题
    线程同步以及AutoResetEvent
    Device Class
    Xamarin.Forms之布局压缩
  • 原文地址:https://www.cnblogs.com/fangyukuan/p/1704849.html
Copyright © 2020-2023  润新知