这几天的便签开发,首先遇到的问题就是数据库操作问题。现在已经可以读写数据库了,并能将数据放在正确的位置显示。
专门建立了一个数据库操作的包,命名为“...database”。新建一个类继承自SQLiteOpenHelper,有一个参数类型为Context的构造方法,只有一行语句来生成对象:
super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
重写了两个方法,一个是 onCreate(SQLiteDatabase db) ,执行数据库的创建语句:
db.execSQL("CREATE TABLE " + TABLE_NAME + " (" + _ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + TIME + " INTEGER, "
+ DETAIL + " TEXT NOT NULL);");
另外一个是 onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) ,升级数据库,两行语句:
db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);
onCreate(db);
到此为止,数据库创建的类完成。
然后是数据绑定到listview,这一部分在MainActivity中完成。
getNotes()方法从数据库中获取数据集:
return managedQuery(CONTENT_URI, FROM, null, null, ORDER_BY);
showNotes(Cursor cursor)方法进行数据绑定:
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.item, cursor, FROM, TO);
setListAdapter(adapter);
打开一条便签后应该是要将相关的数据显示在新打开的NotesDetailActivity中的,也就是要实现在两个Activity中进行数据传递。我能想到的办法就是将在List中被点击的这条便签的数据保存下来,传递到新的NotesDetailActivity中。
给ListView中的Item添加点击事件的方法是:
onListItemClick(ListView l, View v, int position, long id)。
这个方法有四个参数,官方文档解释如下:
l The ListView where the click happened
v The view that was clicked within the ListView
position The position of the view in the list
id The row id of the item that was clicked
首先想到的是“怎么从这个被点击的Item取到数据库中的相应数据”,以此入手开始学习解决这个问题。
首先是获取被点击的Item:
View view = l.getChildAt(position);
第二步是从中取出绑定的数据:
TextView textView = (TextView) view.findViewById(R.id.detail);
detail = textView.getText().toString();
第三步是通过Intent将数据传递给另外一个Activity:
这一步分为两小步,可以理解为一是发送消息:
intent.putExtra("detail", detail);
二是接收消息(在另一个Activity中):
Intent intent = this.getIntent();
String detail = intent.getStringExtra("detail");
这里就是利用了Intent传递数据的机制。