1.基本的ListView
在布局文件添加ListView ,并在java代码中取出:
ListView lv_test =(ListView)findViewById(R.id.lv_test);
创建适配器并绑定
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, arrayList);
lv_test.setAdapter(adapter);
参数:第一个:this –>上下文context。第二个:系统样式,可自定义 。第三个:数组数据
1.1点击事件
lv_test.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
2.继承ListActivity
不需要再布局文件添加ListView,直接在Java部分继承
public class MyListViewActivity extends ListActivity {
}
创建适配器绑定适配器
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList);
setListAdapter(adapter);
参数:同上
3.使用SimpleAdapter
可以自定义视图
1)在主布局文件添加ListView并取出
ListView lv_simple_ada = (ListView) findViewById(R.id.lv_simple_ada);
2)建SimpleAdapter
视图(自定义视图)
java部分:
SimpleAdapter adapter = new SimpleAdapter(this, getData(),
R.layout.simple_a_listviewrow,
new String[] {"img", "name", "info"},
new int[] {R.id.iv_img, R.id.tv_name, R.id.tv_info});
方法说明
android.widget.SimpleAdapter.SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
参数:第一个,上下文对象。第二个,具体数据。第三个,自定义视图(item项)。第四个,数据来源。第五个,绑定去向(绑定给谁)。
具体代码如下:
private List<? extends Map<String, ?>> getData() {
Map<String, Object> map;
array = new ArrayList<Map<String, Object>>();
for (int i = 0; i < 3; i++) {
map = new HashMap<String, Object>();
map.put("img", R.drawable.acorn);
map.put("name", "Acorn");
map.put("info", "这是一个有趣的图标");
array.add(map);
map = new HashMap<String, Object>();
map.put("img", R.drawable.gps);
map.put("name", "GPS");
map.put("info", "这是一个有趣的图标");
array.add(map);
}
return array;
}
最后还需要绑定适配器。
lv_simple_ada.setAdapter(adapter);
4.使用BaseAdapter
添加ListView和创建Item项跟SimpleAdapter一样,主要是适配器不同。
定义BaseAdapter:
BaseAdapter adapter = new BaseAdapter() {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
viewHolder = new ViewHolder();//自定义类对象,用于存放数据,实现优化效果
if (convertView == null) {//此处为了优化,如果第一次加载,则初始化
LayoutInflater inflater = LayoutInflater
.from(BaseAdapterActivity.this);//参数:上下文对象context
convertView = inflater.inflate(R.layout.base_adapter_listrow, parent, false);//参数:第一个,自定义视图(组件将从此获取)
viewHolder.img = (ImageView) convertView.findViewById(R.id.iv_base_img);
viewHolder.name = (TextView) convertView.findViewById(R.id.tv_base_name);
viewHolder.info = (TextView) convertView.findViewById(R.id.tv_base_info);
convertView.setTag(viewHolder);
} else {//如果非第一次加载则直接加载
viewHolder = (ViewHolder) convertView.getTag();
}
//------------设置资源------------>>
viewHolder.img.setImageResource(ids[position]);
viewHolder.name.setText(names[position]);
viewHolder.info.setText("这是一个有趣的图标");
return convertView;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public Object getItem(int position) {
return names[position];
}
@Override
public int getCount() {
return names.length;
}
};
private class ViewHolder {
public ImageView img;
public TextView name;
public TextView info;
}
数据此处用简单的数组来装
String[] names = { "Acorn", "GPS", "Lossless_Decoder", "Minecraft","WinRAR", "YNAB" };
int[] ids = { R.drawable.acorn, R.drawable.gps,R.drawable.lossless_decoder, R.drawable.minecraft,R.drawable.winrar, R.drawable.ynab };
最后绑定适配器(此处与前面一样)。
要为Item项的元素添加点击等可以添加监听,如:
viewHolder.img.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
写在设置完资源之后。
要为Item项添加点击事件,在ListView上添加监听,如:
ListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast toast;
if (toast == null) {
toast = Toast.makeText(ListViewRowEventActivity.this, "", 0);
}
toast.setText("你点了第" + position + "项");
toast.show();
}
});
示例2:
自定义适配器
主布局文件中添加一个下拉选择控件
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
item项的布局文件,文件名:item_spinner.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageView
android:id="@+id/iv_item"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/tv_item"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="50dp"
android:gravity="center"
android:text="nihao" />
</LinearLayout>
定义一个bean文件,文件名:CountryBean.java
package com.example.customeadapter;
public class CountryBean {
private int imageID; //图标id
private String name;
public CountryBean(int imageID, String name) {
super();
this.imageID = imageID;
this.name = name;
}
public int getImageID() {
return imageID;
}
public void setImageID(int imageID) {
this.imageID = imageID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
活动java代码
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Spinner spinner = (Spinner) findViewById(R.id.spinner);
//添加项
CountryBean china = new CountryBean(R.drawable.ic_launcher, "中国");
CountryBean usa = new CountryBean(R.drawable.ic_launcher, "美国");
CountryBean korea = new CountryBean(R.drawable.ic_launcher, "韩国");
CountryBean japan = new CountryBean(R.drawable.ic_launcher, "日本");
//用数组存放
ArrayList<CountryBean> list = new ArrayList<CountryBean>();
list.add(china);
list.add(usa);
list.add(korea);
list.add(japan);
MyAdapter adapter = new MyAdapter(list, this);//定义并初始化自定义适配器,使用参数专递便于写成外部类
spinner.setAdapter(adapter);//绑定适配器
}
//自定义适配器,继承自BaseAdapter
class MyAdapter extends BaseAdapter {
private ArrayList<CountryBean> list;
private Context context;
public MyAdapter(ArrayList<CountryBean> list, Context context) {
super();
this.list = list;
this.context = context;
}
@Override//得到总长度
public int getCount() {
return list.size();
}
@Override//得到item项
public CountryBean getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override//得到视图
public View getView(int position, View convertView, ViewGroup parent) {
//如果视图不存在,则创建
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.item_spinner, parent, false);//绑定视图和视图组
}
//得到视图中的控件
ImageView iv = (ImageView) convertView.findViewById(R.id.iv_item);
TextView tv = (TextView) convertView.findViewById(R.id.tv_item);
CountryBean countryBean = list.get(position);//得到item项对象
//设置资源
iv.setImageResource(countryBean.getImageID());
tv.setText(countryBean.getName());
return convertView;//返回视图
}
}
}