Android再学习-便签开发小结-20141119

时间:2024-04-26 10:07:21

这几天的便签开发,首先遇到的问题就是数据库操作问题。现在已经可以读写数据库了,并能将数据放在正确的位置显示。

专门建立了一个数据库操作的包,命名为“...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传递数据的机制。