现在的位置: 首页 > 综合 > 正文

官方NotePad实例学习–带附加信息并且有返回值的显式Intent

2013年01月23日 ⁄ 综合 ⁄ 共 3210字 ⁄ 字号 评论关闭

在NotePad的实例中,点击Listview里面的选项会执行 onListItemClick方法,下面我们看看这个方法的实现:

@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
		// TODO Auto-generated method stub
		super.onListItemClick(l, v, position, id);
		Cursor c = mNotesCursor;
	    c.moveToPosition(position);
		Intent intent = new Intent(this, NoteEdit.class);
		intent.putExtra(NoteDbAdapter.KEY_ROWID, id);
		intent.putExtra(NoteDbAdapter.KEY_TITLE, c.getString(c.getColumnIndexOrThrow(NoteDbAdapter.KEY_TITLE)));
		intent.putExtra(NoteDbAdapter.KEY_BODY, c.getString(c.getColumnIndexOrThrow(NoteDbAdapter.KEY_BODY)));
		startActivityForResult(intent, ACTIVITY_EDIT);
	}

  • putExtra方法添加附加信息到intent中。
  • startActivityForResult中第二个参数要>=0,并且在onActivityResult方法中会返回这个值。
启动NoteEdit后,输入一些信息,点击提交按钮,会把结果返回到前面的Activity中。
package com.hebaijun.notepad;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class NoteEdit extends Activity{
	private EditText titleEditText;
	private EditText bodyEditText;
	private Long noteID;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.note_edit);
		setTitle(R.string.edit_note);
		
		titleEditText = (EditText) findViewById(R.id.title);
		bodyEditText = (EditText) findViewById(R.id.body);
		Button confirm = (Button) findViewById(R.id.confirm);
		noteID = null;
		
		Bundle bundle = getIntent().getExtras();
		if (bundle != null) {
			String title = bundle.getString(NoteDbAdapter.KEY_TITLE); 
		    String body = bundle.getString(NoteDbAdapter.KEY_BODY); 
		    noteID = bundle.getLong(NoteDbAdapter.KEY_ROWID); 
		 
		    if (title != null) { 
		        titleEditText.setText(title); 
		    } 
		    if (body != null) { 
		        bodyEditText.setText(body); 
		    } 

		}
		
		confirm.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Bundle bundle = new Bundle();
				bundle.putString(NoteDbAdapter.KEY_TITLE, titleEditText.getText().toString());
				bundle.putString(NoteDbAdapter.KEY_BODY, bodyEditText.getText().toString());
				if (noteID != null) {
					bundle.putLong(NoteDbAdapter.KEY_ROWID, noteID);
				}
				
				Intent mIntent = new Intent();
                mIntent.putExtras(bundle);
                setResult(RESULT_OK, mIntent);
                finish();
			}
		});
	}

}

  • getIntent().getExtras()方法取得传递过来的Intent的附加信息。
  • onClick方法中,setResult方法返回结果给调用它的Activity。第一个参数通常是RESULT_CANCELED或者 RESULT_OK,在onActivityResult方法的第二个参数resultCode可以取得这个值。
  • finish()方法在activity完成并且需要关闭的时候调用,调用后会把信息返回到调用它的activity的onActivityResult方法中。
看看onActivityResult方法:
@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		Bundle bundle = data.getExtras();
		switch (requestCode) {
		case ACTIVITY_CREATE:
			String noteName = bundle.getString(NoteDbAdapter.KEY_TITLE);
			String noteBody = bundle.getString(NoteDbAdapter.KEY_BODY);
			mDbHelper.createNote(noteName, noteBody);
	        fillData();
			break;
			
		case ACTIVITY_EDIT:
			Long rowId = bundle.getLong(NoteDbAdapter.KEY_ROWID);
            if (rowId != null) {
                String editTitle = bundle.getString(NoteDbAdapter.KEY_TITLE);
                String editBody = bundle.getString(NoteDbAdapter.KEY_BODY);
                mDbHelper.updateNote(rowId, editTitle, editBody);
            }
            fillData();
            break;
            
		default:
			break;
		}
	}

  • requestCode是 startActivityForResult方法执行是传递过去的值,通过这个值,我们可以判断是哪个组件返回了结果。
  • resultCode是通过 setResult方法返回的值,作用是告知返回状态,是成功还是取消等等。
  • onActivityResult会在onResume方法前执行。

抱歉!评论已关闭.