Android 控制項之ListView

來源:互聯網
上載者:User

Android 控制項之ListView

--學習筆記5(金海建)

目的:學習listview的使用方法

在Android中listview是比較常用的控制項,根據列表的適配器類型,列表分為三種,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter

其中以ArrayAdapter最為簡單,只能展示一行字。SimpleAdapter有最好的擴充性,可以自訂出各種效果。SimpleCursorAdapter可以認為是SimpleAdapter對資料庫的簡單結合,可以方面的把資料庫的內容以列表的形式展示出來。

Listview的實現:

1.準備ListView要顯示的資料,一維數組、多維陣列

2.根據不同的應用,構建適配器

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

寫一個簡單的程式,添加三個菜單,分別來測試ArrayAdapter、SimpleCursorAdapter和SimpleAdapter

ArrayAdapter

listviewlayout.xml

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

 

 

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

上面的代碼使用了ArrayAdapter(Context context, int textViewResourceId, T[] objects)來構建Adapter。

textViewResourceId為listview視圖的layout,在listviewlayout.xml中定義了TextView的layout。T[]object就是我們要傳入的字串數組。最後調用ListView的setAdapter來顯示。

運行效果如下:

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

SimpleAdapter

從資料庫中讀取號碼,然後顯示出來。去具體的連絡人資訊要用到ContactsContract.CommonDataKinds.Phone.CONTENT_URI

代碼如下:

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.