1)下载代码
先下载代码,解压。
http://androidappdocs.appspot.com/resources/tutorials/notepad/codelab/NotepadCodeLab.zip
2)把代码导入工程
File > New > Android Project
选择 Create project from existing source
点击Browse 找到Notepadv1
选择sdk版本。
打开可以看到src下有一个NotesDbAdapter。这个类是操作SQLite数据库的封装类。
3)修改notepad_list
打开res\layout\notepad_list.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="wrap_content"
    android:layout_height="wrap_content">
</LinearLayout>
添加代码。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <ListView android:id="@android:id/list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <TextView android:id="@android:id/empty"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/no_notes"/>
</LinearLayout>
ID list 和 empty 是由Android平台提供,所以前面要加命名空间android
当ListAdapter 不能为ListView提供数据的时候。Empty为自动被使用。当然我们可以用setEmptyView(View)把ListView设置为空。
(ListAdapter是ListView和数据的桥梁,通常来自光标)
4)关于notes_row
打开 res/layout/notes_row.xml  
每个记事本的标题文本。
<?xml version="1.0" encoding="UTF-8"?>
<TextView android:id="@+id/text1"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
5)打开Notepadv1
打开src/com/android/demo/notepad1/Notepadv1.java
package com.android.demo.notepad1;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class Notepadv1 extends {
    private int mNoteNumber = 1;
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // TODO Auto-generated method stub
        return super.onCreateOptionsMenu(menu);
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        return super.onOptionsItemSelected(item);
    }
}
把 类修改成 ListActivity, ListActivity也是从Activity继承过来的。但是提供了一些额外的功能。更加适合对list进行操作。
6)在onCreate添加代码
先定义一个NotesDbAdapter成员。
在onCreate添加代码。生成一个NotesDbAdapter实例。
并调用open方法。
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.notepad_list);
        mDbHelper = new NotesDbAdapter(this);
        mDbHelper.open();
        fillData();
}
7) 关于fillData方法
可以看到fillData(), 这个是我们自己定义的从数据库取数据并填充到notes_row一个方法。
    private void fillData()
    {
     Cursor c = mDbHelper.fetchAllNotes();
     
     String[] from = new String[] {KEY_TITLE };
     int [] to = new int[]{R.id.text1};
     
     SimpleCursorAdapter notes = new SimpleCursorAdapter(this, R.layout.notes_row, c, from, to);
     setListAdapter(notes);
}
startManagingCursor(c)方法可以把光标的生命周期交给Android去管理。
定义一个String数组from,存放我们将显示的数据库某表里的一个列名。(这里只一个即:NotesDbAdapter.KEY_TITLE)
定义一个int数组to,存放我们将显示from数组里列内容的视图id.(如果有多个,他们将一一对应)
我们将用SimpleCursorAdapter类把数据从from映射到to
8)在字符串资源增加一个字符串
在字符串资源((under res/values/strings.xml )增加,一个字符串
<string name="menu_insert">Add Item</string>
9)在onCreateOptionsMenu添加代码
在Notepadv1类定义一个菜单id.
public static final int INSERT_ID = Menu.FIRST;
在onCreateOptionsMenu添加代码。
    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
    {
     boolean result = super.onCreateOptionsMenu(menu);
     menu.add(0, INSERT_ID, 0, R.string.menu_insert);
        // TODO Auto-generated method stub
        return result;
}
初始化菜单项,并添加一个项。
10)在onOptionsItemSelected添加代码
    @Override
    public boolean onOptionsItemSelected(MenuItem item) 
    {
        // TODO Auto-generated method stub
     switch(item.getItemId())
     {
     case INSERT_ID:
         createNote();
         return true;
     }
        return super.onOptionsItemSelected(item);
}
处理菜单项事件。
在这里只有一个菜单项要处理即:INSERT_ID,当用户点击的时候,就调用createNote();创建一个记事本。
11)关于createNote方法
下面看看我们自己写的方法createNote
    private void createNote()
    {
         String noteName = "Note " + mNoteNumber++;
         mDbHelper.createNote(noteName, "");
        fillData();
}
它使用NotesDbAdapter的createNote方法创建一个记事本
按一下ctrl-shift-O 确保所有包都import进来了
下面可以按F11跑一下我们的程序了。
效果图如下:
 
                    
                

                
            
        
浙公网安备 33010602011771号