Android 学习笔记. -- notepad

Android 学习笔记.

 

工程: notepad.

项目: Notepadv2Solution

类: Notepadv2

方法: onListItemClick(ListView l, View v, int position, long id)

实际上 Intent 的作用就是作为承载 ACTIVITY 之间交换数据的容器.

Intent i = new Intent(this, NoteEdit.class);
i.putExtra(NotesDbAdapter.KEY_ROWID, id);
i.putExtra(NotesDbAdapter.KEY_TITLE, c.getString(
c.getColumnIndexOrThrow(NotesDbAdapter.KEY_TITLE)));
i.putExtra(NotesDbAdapter.KEY_BODY, c.getString(
c.getColumnIndexOrThrow(NotesDbAdapter.KEY_BODY)));
startActivityForResult(i, ACTIVITY_EDIT);

这里实例化了 Intent 对象, 参数 是 this 和 需要调用的 ACTIVITY 的类型.
并且调用putExtra方法通过 键 => 值 对的方式存放需要传递的内容. 这里我基本上是把 Intent 对象看做是一个 list 或 hash
最后调用 startActivityForResult(i, ACTIVITY_EDIT)
手册里是这样写得:

With the extras added to the Intent, we invoke the Intent on the NoteEdit class by passing startActivityForResult()  the Intent and the request code. (The request code will be returned to onActivityResult as the requestCode  parameter.)

我的理解既是:

当调用 startActivityForResult(i, ACTIVITY_EDIT) 方法后, 根据上下文推断得出, 将实例化产生 NoteEdit.class 这个 新的 ACTIVITY, 并且把 Intent 和 ACTIVITY 的类型 ACTIVITY_EDIT 作为参数传递过去.

这时再来看 类 NoteEdit:

Bundle extras = getIntent().getExtras();

这里取得了调用者( Notepadv2 )传递过来的的 Intent.

这里需要注意的是 button 的绑定事件,

Bundle bundle = new Bundle();

这里的 bundle 又是一个容器, 它的作用也是包装数据,返回给Notepadv2, 我也搞不懂为什么这里要先使用 bundle 包装数据:

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

然后在使用:

Intent mIntent = new Intent();
mIntent.putExtras(bundle);

而不继续使用 Intent 包装后返回, 我认为这样很繁琐, 为什么不直接包装 Intent 返回给 调用者?

再次回到 Notepadv2

方法 onActivityResult(int requestCode, int resultCode, Intent intent)

先看手册怎么说的:

onActivityResult() is the overridden method which will be called when an Activity returns with a result. (Remember, an Activity will only return a result if launched with startActivityForResult.)

可以认为 onActivityResult() 是 startActivityForResult(i, ACTIVITY_EDIT) 的回调函数, 调用的时机是 startActivityForResult 产生的新 ACTIVITY (即 NoteEdit) 关闭后, 这里是就是

setResult(RESULT_OK, mIntent);
finish();

几个参数需要注意的是 requestCode, 就是 startActivityForResult(i, ACTIVITY_EDIT) 传递过去的 ACTIVITY_EDIT, 这里又返回来了.

转载于:https://www.cnblogs.com/Bennet/archive/2010/06/27/1766034.html

你可能感兴趣的:(Android 学习笔记. -- notepad)