ListView详解(一)之ArrayAdapter的使用
1、Listview简述
A view that shows items in a vertically scrolling list. The items come from theListAdapter
associated with this view.
简单来说就是,创建Listview,然后给数值就行了。
而这些数值来源有三种方式:ArrayAdapter、SimpleAdapter、SimpleCursorAdapter
第一种是最简单的一种Adapter,是字符串数值,只能在ListView显示出文本信息。
第二种是一种自定义的数据来源,要自定义布局方式,可以放置图片,按钮,文本之类的。
第三种数据来源于数据库。
2、使用ListView步骤
将数据填充到布局之ArrayAdapter的使用
布局文件加入ListView控件:
<ListView android:id="@+id/lv" android:layout_width="fill_parent" android:layout_height="fill_parent" />
主程序:
MyListView.java package com.ycz.mylistview; import android.app.Activity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListView; public class MyListView extends Activity{ private static final String[] str=new String[]{"first","second","third","fourth","fifth"}; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); lv=(ListView)findViewById(R.id.lv); //绑定ArrayAdapter适配器 lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,str)); } }
第一个参数表示上下文,第二个参数表示一个包含TextView,用来填充listView的每一行的布局资源ID,第三个参数为ListView的内容。
通过指定第二个参数来实现不同的显示效果,资源android.R.layout.simple_list_item_1来实现仅显示内容,无勾选。资源android.R.layout_simpel_list_item_checked实现带选择框的ListView,需要用setChoiceMode()设定选择为多选还是单选。资源android.R.layout.simple_list_item_multiple_choice实现带checkbox的ListView,需要用setChoiceMode()设定选择为多选还是单选。资源android.R.layout.simple_list_item_
single_choice实现带RadioButton的ListView,需要用setChoiceMode()设定为多选还是单选。
示例一
lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked,str)); lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
//实现带选择框的ListView,并设置为多选
示例二
lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,str)); lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
//实现带CheckBox的ListView,并设置为多选
示例三
lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_ single_choice,str)); lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
- 处理用户操作之onItemClick()方法的使用
通过调用setOnItemClickListener
()接口方法,设置“点击”listview某一项的监听事件。
通过调用setOnItemLongClickListener
()接口方法,设置“长按”listview某一项的监听事件。
mylistview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub } }); mylistview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub } });
关于onItemClick方法,下面详细说说。(以下是官方的说明,参数命名不同而已,类型都是一样的。arg0=parent,arg1=view,arg2=position,arg3=id)
public abstract void onItemClick(AdapterView<?> parent,View view, int position, long id)
Callback method to be invoked when an item in this AdapterView has been clicked.
Implementers can call getItemAtPosition(position) if they need to access the data associated with the selected item.
//当点击listview某一项时,这个回调方法就会被调用。
Parameters
parent | The AdapterView where the click happened. |
---|---|
view | The view within the AdapterView that was clicked (this will be a view provided by the adapter) |
position | The position of the view in the adapter. |
id | The row id of the item that was clicked. |
主要说说最后三个参数,
view——————是你点击的Listview的某一项的内容,来源于adapter。如用((TextView)arg1).getText(),可以取出点击的这一项的内容,转为string类型。
position————是item在adapter的位置,如点击了listview第2项,而第2项对应的是adapter的第2个数值,那此时position的值就为1了。
id———————id的值为点击了Listview的哪一项对应的数值,点击了listview第2项,那id就等于1。
注:这些数值都是从0开始的。
需要说明的是,当设置匿名内部类new OnItemClickListener()时,eclipse不会自动载入复写函数,要点击左边的错误提示,然后Add unimplemented methods,才能载入复写函数onItemClick()。
package com.conowen.listview; 1.import android.app.Activity; 2.import android.os.Bundle; 3.import android.view.View; 4.import android.widget.AdapterView; 5.import android.widget.AdapterView.OnItemClickListener; 6.import android.widget.AdapterView.OnItemLongClickListener; 7.import android.widget.ArrayAdapter; 8.import android.widget.ListView; 9.import android.widget.TextView; 10.import android.widget.Toast; 11.public class ListviewActivity extends Activity { 12./** Called when the activity is first created. */ 13.@Override 14.public void onCreate(Bundle savedInstanceState) { 15.super.onCreate(savedInstanceState); 16. setContentView(R.layout.main); 17. ListView lv = (ListView) findViewById(R.id.lv); 18. String[] data = { "windows", "linux", "ios", "android", "wp7", 19."Symbian" };// 定义adapter 20. lv.setAdapter(new ArrayAdapter<String>(this,// 把adapter绑定到listview里面 21. android.R.layout.simple_expandable_list_item_1, data)); 22.// 点击事件 23. lv.setOnItemClickListener(new OnItemClickListener() { 24.@Override 25.public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 26.long arg3) { 27.// TODO Auto-generated method stub 28. Toast.makeText(ListviewActivity.this, "你点击的是第" + arg3 + "项", 29. Toast.LENGTH_SHORT).show(); 30.// 取出所点击的那一项的id 31. } 32. }); 33.// 长按事件 34. lv.setOnItemLongClickListener(new OnItemLongClickListener() { 35.@Override 36.public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 37.int arg2, long arg3) { 38.// TODO Auto-generated method stub 39. Toast.makeText(ListviewActivity.this, 40. ((TextView) arg1).getText(), Toast.LENGTH_LONG).show(); 41.// 取出点击listview某一项的内容 42.return false; 43. } 44. }); 45. } 46.}