fangyukuan

永无止境的追求...追求卓越!!!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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设置为空。

ListAdapterListView和数据的桥梁,通常来自光标)

 

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成员。

private mDbHelper;

 

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();

    }

它使用NotesDbAdaptercreateNote方法创建一个记事本

 

按一下ctrl-shift-O 确保所有包都import进来了

 

下面可以按F11跑一下我们的程序了。

效果图如下:

 

http://www.cnblogs.com/fangyukuan/archive/2010/04/05/1704806.html

posted on 2010-04-05 17:47  fangyukuan  阅读(883)  评论(1编辑  收藏  举报