Android 控件之ListView

Android 控件之ListView

--学习笔记5(金海建)

目的:学习listview的使用方法

在Android中listview是比较常用的控件,根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter

其中以ArrayAdapter最为简单,只能展示一行字。SimpleAdapter有最好的扩充性,可以自定义出各种效果。SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。

Listview的实现:

1.准备ListView要显示的数据,一维数组、多维数组

2.根据不同的应用,构建适配器

3.把适配器添加到ListView中。

写一个简单的程序,添加三个菜单,分别来测试ArrayAdapter、SimpleCursorAdapter和SimpleAdapter

Android 控件之ListView_第1张图片

ArrayAdapter

listviewlayout.xml

<?xml version="1.0" encoding="utf-8"?> <TextView android:text="@+id/TextView01" android:id="@+id/TextView01" android:layout_height="wrap_content" xmlns:android="http://schemas.android.com/apk/res/android" android:textStyle="bold" android:textSize="24px" android:layout_width="match_parent"> </TextView>  

 

 

import java.util.List; import java.util.ArrayList; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.AdapterView.OnItemClickListener; public class TestListView extends Activity { /** Called when the activity is first created. */ private ListView m_listview; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); m_listview = new ListView(this); m_listview.setAdapter(new ArrayAdapter<String>(this, R.layout.listviewlayout, getData())); setContentView(m_listview); m_listview.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected (AdapterView<?> parent, View view, int position, long id) { DisplayToast("选择了第" + position + "行"); } public void onNothingSelected(AdapterView<?> arg0) { } }); private List<String> getData() { final List<String> data = new ArrayList<String>(); data.add("第一行..."); data.add("第二行..."); data.add("第三行..."); data.add("第四行..."); return data; } public void DisplayToast(String str) { Toast.makeText(this, str, Toast.LENGTH_SHORT).show(); } }  

上面的代码使用了ArrayAdapter(Context context, int textViewResourceId, T[] objects)来构建Adapter。

textViewResourceId为listview视图的layout,在listviewlayout.xml中定义了TextView的layout。T[]object就是我们要传入的字符串数组。最后调用ListView的setAdapter来显示。

运行效果如下:

Android 控件之ListView_第2张图片

SimpleCursorAdapter

SimpleCursorAdapter跟ArrayAdapter的区别在于,SimpleCursorAdapter的数据来源自数据库,通过Cursor来获取。看来SimpleCursorAdapter 的构造函数。SimpleCursorAdapter (Context context, int layout, Cursor c, String[] from, int[] to),前两个参数跟ArrayAdapter一样,c是数据库游标指针,form是数据库的列,用字符表示,to表示要显示的控件的id。From和to是一一对应。这样每一列都对应一个控件的显示。

我们现在模拟器上建立几条联系人,然后读取联系人、显示到ListView中。

import android.database.Cursor; public class CursorAdapterListView extends Activity { /** Called when the activity is first created. */ private ListView m_listview; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Cursor cur = this.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); m_listview = new ListView(this); SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.listviewlayout, cur, new String[] {Contacts.DISPLAY_NAME}, new int[] {R.id.TextView01}); m_listview.setAdapter( adapter); setContentView(m_listview); } public void DisplayToast(String str) { Toast.makeText(this, str, Toast.LENGTH_SHORT).show(); } }  

效果图

Android 控件之ListView_第3张图片Android 控件之ListView_第4张图片

SimpleAdapter

从数据库中读取号码,然后显示出来。去具体的联系人信息要用到ContactsContract.CommonDataKinds.Phone.CONTENT_URI

代码如下:

import android.util.Log; import java.lang.Integer; public class SampleAdapterListView extends Activity { /** Called when the activity is first created. */ private ArrayList<HashMap<String, Object>> m_listitems; private ListView m_listview; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); m_listview = new ListView(this); m_listitems = GetContactInfo(); m_listview.setAdapter(new SimpleAdapter(this, m_listitems, R.layout.sampleadapterlayout, new String[]{"Name", "Number"}, new int []{R.id.contactname, R.id.phonenumber} )); setContentView(m_listview); m_listview.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { DisplayToast("选择了第" + position + "行"); } public void onNothingSelected(AdapterView<?> arg0) { } }); m_listview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //ArrayList<HashMap<String, Object>> adpter = (ArrayList<HashMap<String, Object>>)parent.getAdapter(); HashMap<String, Object> item = m_listitems.get(position); String strName = (String)item.get("Name"); String strNumber = (String)item.get("Number"); DisplayToast(strName + strNumber); } }); } private ArrayList<HashMap<String, Object>> GetContactInfo() { ArrayList<HashMap<String, Object>> listitems = new ArrayList<HashMap<String, Object>>(); Cursor cur = this.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); cur.moveToFirst(); do { HashMap<String, Object> item = new HashMap<String, Object>(); String szContactName = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); String szId = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); String szHasNumber = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); item.put("Name", szContactName); if(szHasNumber.compareTo("1") == 0) { Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ szId,null, null); while (phones.moveToNext()) { String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); String phoneTpye = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)); if(new Integer(ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE).toString().compareTo(phoneTpye) == 0) { item.put("Number", "Mobile: " + phoneNumber); // 多个号码如何处理 } else { item.put("Number", "Home:" + phoneNumber); // 多个号码如何处理 } item.put("Type", phoneTpye); Log.v("TestContacts", "Name:" + szContactName + " Number:" + phoneNumber + " Type:" + phoneTpye); } phones.close(); } listitems.add(item); }while(cur.moveToNext()); cur.close(); return listitems; } public void DisplayToast(String str) { Toast.makeText(this, str, Toast.LENGTH_SHORT).show(); } }  

效果图:

Android 控件之ListView_第5张图片

你可能感兴趣的:(android,数据库,object,ListView,String,null)