《Android Dev Guide》系列教程18:通過適配器給AdapterView綁定資料
懶骨頭(http://blog.csdn.com/iamlazybone)
AdapterView是ViewGroup的一個子類,由一個適配器,和綁定到適配器的某些類型的資料群組合而成。當你需要顯示一些儲存的資料時,AdapterView是非常有用的。
Gallery、ListView和Spinner便是AdapterView的例子,他們可以讓你使用一些特殊格式的資料並且用一種特定的方式來顯示這些資料。
ApapterView對象有兩個主要職責:
@ 用資料來填充視圖
@ 處理使用者的操作事件
給視圖填充資料
把資料插入到視圖裡,通常是由綁定適配器的AdapterView類來完成的,通常是從一些額外的儲存中獲得的資料,比如代碼來提供或者從裝置的資料庫中查詢的結果集。例如下面的代碼:
1-使用一個已存在的View建立一個Spinner,然後綁定一個ArrayAdapter類來從本地資源裡讀取顏色列表。
2-建立另一個Spinner對象,綁定到一個SimpleCursorAdapter類,然後從手機的連絡人清單讀取連絡人的名字。
// Get a Spinner and bind it to an ArrayAdapter that<br />// references a String array.<br />Spinner s1 = (Spinner) findViewById(R.id.spinner1);<br />ArrayAdapter adapter = ArrayAdapter.createFromResource(<br /> this, R.array.colors, android.R.layout.simple_spinner_item);<br />adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);<br />s1.setAdapter(adapter);<br />// Load a Spinner and bind it to a data query.<br />private static String[] PROJECTION = new String[] {<br /> People._ID, People.NAME<br /> };<br />Spinner s2 = (Spinner) findViewById(R.id.spinner2);<br />Cursor cur = managedQuery(People.CONTENT_URI, PROJECTION, null, null);</p><p>SimpleCursorAdapter adapter2 = new SimpleCursorAdapter(this,<br /> android.R.layout.simple_spinner_item, // Use a template<br /> // that displays a<br /> // text view<br /> cur, // Give the cursor to the list adapter<br /> new String[] {People.NAME}, // Map the NAME column in the<br /> // people database to...<br /> new int[] {android.R.id.text1}); // The "text1" view defined in<br /> // the XML template</p><p>adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);<br />s2.setAdapter(adapter2);
注意:
在PROJECTION欄位中,你必須有一個People._ID列,否則會拋出一個異常。
如果期間你修改了資料,那麼需要調用一下notifyDataSetChanged()方法。這樣視圖便會做出相應更新。
處理使用者的選擇事件
通過實現AdapterView.onItemClickListener監聽器類,來擷取使用者的選擇。
// Create a message handling object as an anonymous class.<br />private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() {<br /> public void onItemClick(AdapterView parent, View v, int position, long id)<br /> {<br /> // Display a messagebox.<br /> Toast.makeText(mContext,"You've got an event",Toast.LENGTH_SHORT).show();<br /> }<br />};<br />// Now hook into our object and set its onItemClickListener member<br />// to our class handler object.<br />mHistoryView = (ListView)findViewById(R.id.history);<br />mHistoryView.setOnItemClickListener(mMessageClickedHandler);