Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android ArrayAdapter和SimpleCursorAdapter例子

Android ArrayAdapter和SimpleCursorAdapter例子

編輯:Android開發實例

使用ArrayAdapter定制To-Do List

 

這個例子將擴展To-Do List工程,以一個ToDoItem對象來儲存每一個項目,包含每個項目的創建日期。

 

你將擴展ArrayAdapter類來綁定一組ToDoItem對象到ListView上,並定制用於顯示每一個ListView項目的layout。

 

1. 返回到To-Do List工程。創建一個新的ToDoItem類來保存任務和任務的創建日期。重寫toString方法來返回一個項目數據的概要。

 

package com.paad.todolist;

import java.text.SimpleDateFormat;

import java.util.Date;

 

public class ToDoItem {

String task;

Date created;

 

public String getTask() {

return task;

}

 

public Date getCreated() {

return created;

}

 

public ToDoItem(String _task) {

this(_task, new Date(java.lang.System.currentTimeMillis()));

}

 

public ToDoItem(String _task, Date _created) {

task = _task;

created = _created;

}

 

@Override

public String toString() {

SimpleDateFormat sdf = new SimpleDateFormat(“dd/MM/yy”);

String dateString = sdf.format(created);

return “(“ + dateString + “) “ + task;

}

}

 

2. 打開ToDoList Activity,修改ArrayList和ArrayAdapter變量的類型,儲存ToDoItem對象而不是字符串。然後,你將修改onCreate方法來更新相應的變量初始化。你還需要更新onKeyListener處理函數來支持ToDoItem對象。

 

private ArrayList<ToDoItem> todoItems;

private ListView myListView;

private EditText myEditText;

private ArrayAdapter<ToDoItem> aa;

 

@Override

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

 

// Inflate your view

setContentView(R.layout.main);

 

// Get references to UI widgets

myListView = (ListView)findViewById(R.id.myListView);

myEditText = (EditText)findViewById(R.id.myEditText);

todoItems = new ArrayList<ToDoItem>();

int resID = R.layout.todolist_item;

aa = new ArrayAdapter<ToDoItem>(this, resID, todoItems);

myListView.setAdapter(aa);

myEditText.setOnKeyListener(new OnKeyListener() {

public boolean onKey(View v, int keyCode, KeyEvent event)

{

if (event.getAction() == KeyEvent.ACTION_DOWN)

if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER)

{

ToDoItem newItem;

newItem = new ToDoItem(myEditText.getText().toString());

todoItems.add(0, newItem);

myEditText.setText(“”);

aa.notifyDataSetChanged();

cancelAdd();

return true;

}

return false;

}

});

registerForContextMenu(myListView);

}

 

3. 如果你運行Activity,它將顯示每個to-do項目,如圖5-3所示。

 

圖5-3

 

4. 現在,你可以創建一個自定義的layout來顯示每一個to-do項目。修改在第4章中創建的自定義layout,包含另外一個TextView,它將用於顯示每個to-do項目的創建日期。

 

<?xml version=”1.0” encoding=”utf-8”?>

<RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android”

android:layout_width=”fill_parent”

android:layout_height=”fill_parent”

android:background=”@color/notepad_paper”>

<TextView

android:id=”@+id/rowDate”

android:layout_width=”wrap_content”

android:layout_height=”fill_parent”

android:padding=”10dp”

android:scrollbars=”vertical”

android:fadingEdge=”vertical”

android:textColor=”@color/notepad_text”

android:layout_alignParentRight=”true”

/>

<TextView

android:id=”@+id/row”

android:layout_width=”fill_parent”

android:layout_height=”fill_parent”

android:padding=”10dp”

android:scrollbars=”vertical”

android:fadingEdge=”vertical”

android:textColor=”@color/notepad_text”

android:layout_alignParentLeft=”@+id/rowDate”

/>

</RelativeLayout>

 

5. 創建一個新的類(ToDoItemAdapter),使用指定的ToDoItem變量來擴展一個ArrayAdapter。重寫getView方法來將ToDoItem對象中的task和date屬性指定給第4步創建的layout中的View。

 

import java.text.SimpleDateFormat;

import android.content.Context;

import java.util.*;

import android.view.*;

import android.widget.*;

 

public class ToDoItemAdapter extends ArrayAdapter<ToDoItem> {

int resource;

 

public ToDoItemAdapter(Context _context,int _resource, List<ToDoItem> _items) {

super(_context, _resource, _items);

resource = _resource;

}

 

@Override

public View getView(int position, View convertView, ViewGroup parent)

{

LinearLayout todoView;

ToDoItem item = getItem(position);

String taskString = item.getTask();

Date createdDate = item.getCreated();

SimpleDateFormat sdf = new SimpleDateFormat(“dd/MM/yy”);

String dateString = sdf.format(createdDate);

if (convertView == null)

{

todoView = new LinearLayout(getContext());

String inflater = Context.LAYOUT_INFLATER_SERVICE;

LayoutInflater vi;

vi = (LayoutInflater)getContext().getSystemService(inflater);

vi.inflate(resource, todoView, true);

}

else

{

todoView = (LinearLayout) convertView;

}

TextView dateView = (TextView)todoView.findViewById(R.id.rowDate);

TextView taskView = (TextView)todoView.findViewById(R.id.row);

dateView.setText(dateString);

taskView.setText(taskString);

return todoView;

}

}

 

6. 最後,用ToDoItemAdapter替換ArrayAdapter的定義。

 

private ToDoItemAdapter aa;

 

在onCreate中,使用new ToDoItemAdapter來替換ArrayAdapter<String>的實例化。

 

aa = new ToDoItemAdapter(this, resID, todoItems);

 

7. 如果你運行Activity,它看起來如圖5-4的截圖。

 

圖5-4

 

使用SimpleCursorAdapter

 

SimpleCursorAdapter允許你綁定一個游標的列到ListView上,並使用自定義的layout顯示每個項目。

 

SimpleCursorAdapter的創建,需要傳入當前的上下文、一個layout資源,一個游標和兩個數組:一個包含使用的列的名字,另一個(相同大小)數組包含View中的資源ID,用於顯示相應列的數據值。

 

下面的框架代碼顯示了如何構造一個SimpleCursorAdapter來顯示聯系人信息:

 

String uriString = “content://contacts/people/”;

Cursor myCursor = managedQuery(Uri.parse(uriString), null, null, null, null);

String[] fromColumns = new String[] {People.NUMBER, People.NAME};

int[] toLayoutIDs = new int[] { R.id.nameTextView, R.id.numberTextView};

SimpleCursorAdapter myAdapter;

myAdapter = new SimpleCursorAdapter(this,R.layout.simplecursorlayout,myCursor,fromColumns,toLayoutIDs);

myListView.setAdapter(myAdapter);

 

SimpleCursorAdapter在本章前面的創建選擇聯系人的例子中使用過。你將在第6章學習到更多關於Content Provider和Cursor的內容,那裡你也將找到更多SimpleCursorAdapter的例子。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved