Android UI系统控件进阶(一)之列表控件ListView详解
2014-11-28 13:51
477 查看
ListVeiw 源代码下载:点击打开链接
列表控件ListView
列表控件ListViewListView是一种用于垂直显示的列表控件,其类的继承结构如下:
![](http://img.blog.csdn.net/20141128135556648?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGV5dWNoYW5nNjY2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
ListView是比较常用的组件,它以列表的形式展示具体内容,如果ListView控件显示内容过多,则会出现垂直滚动条,并且它能够根据数据的长度自适应显示。列表的显示需要三个元素:
1.ListVeiw 用来展示列表的View。
2.适配器用来把数据映射到ListView上的中介。
3.数据,指被映射的字符串、图片或者基本组件。根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter。
ListView支持点击事件处理,用户可以用少量的代码实现复杂的选择功能。在布局文件中,用XML描述的ListView控件,代码如下:
ListView是一个经常用到的控件,ListView里面的每个子项Item可以使一个字符串,也可以是一个组合控件。先说说ListView的实现:
1.准备ListView要显示的数据 ;
2.使用 一维或多维 动态数组 保存数据;
3.构建适配器 , 简单地来说, 适配器就是 Item数组 , 动态数组 有多少元素就生成多少个Item;
4.把 适配器 添加到ListView,并显示出来。
适配器:
说道ListView就不得不说Adapter适配器,因为只有通过Adapter才可以把列表中的数据映射到ListView中,Android中Adapter可以这么理解的,是数据和视图之间的桥梁,数据在adapter中做处理,然后显示到视图上面。在android的开发中最Adapter
一共可以分为:
1.ArrayAdapter,
2.BaseAdapter,
3.CursorAdapter,
4.HeaderViewListAdapter,
5.ResourceCursorAdapter,
6.SimpleAdapter,
7.SimpleCursorAdapter,
8.WrapperListAdapter
ListView开发中:ArrayAdapter,SimpleAdapter和SimpleCursorAdapter
ArrayAdapter:它只能用于显示文字。
SimpleAdapter:它的功能非常强大。可以通过它自定义ListView中的item的内容,比如图片、多选框等。
SimpleCursorAdapter:在许多时候需要将数据库表中的数据显示在ListView、Gallery等组件中。虽然可以直接使用Adapter对象处理,但工作量很大。为此,Android
SDK提供了一个专用于数据绑定的Adapter类:SimpleCursorAdapter。
以下是一个简单的例子:
[b]ArrayAdapter:
[/b]
[b]
![](http://img.blog.csdn.net/20141201141127883?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGV5dWNoYW5nNjY2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
[/b]
public class MyListView extends Activity {
private ListView listView;
//private List<String> data = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
listView = new ListView(this);
listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,getData()));
setContentView(listView);
}
private List<String> getData(){
List<String> data = new ArrayList<String>();
data.add("漩涡鸣人");
data.add("宇智波止水");
data.add("黑崎一护");
data.add("波风水门");
data.add("奈良鹿丸");
data.add("山中井野");
return data;
}
}
SimpleAdapter:
例1
![](http://img.blog.csdn.net/20141201141145698?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGV5dWNoYW5nNjY2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
public class MyListView3 extends ListActivity {
// private List<String> data = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SimpleAdapter adapter = new SimpleAdapter(this,getData(),R.layout.vlist,
new String[]{"title","info","img"},
new int[]{R.id.title,R.id.info,R.id.img});
setListAdapter(adapter);
}
private List<Map<String, Object>> getData() {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();
map.put("title", "火影");
map.put("info", "漩涡鸣人");
map.put("img", R.drawable.i1);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "死神");
map.put("info", "黑崎一护");
map.put("img", R.drawable.i2);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "海贼王");
map.put("info", "索隆");
map.put("img", R.drawable.i3);
list.add(map);
return list;
}
}
例2:
public class MyListView4 extends ListActivity {
private List<Map<String, Object>> mData;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mData = getData();
MyAdapter adapter = new MyAdapter(this);
setListAdapter(adapter);
}
private List<Map<String, Object>> getData() {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();
map.put("title", "火影");
map.put("info", "漩涡鸣人");
map.put("img", R.drawable.i1);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "死神");
map.put("info", "黑崎一护");
map.put("img", R.drawable.i2);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "海贼王");
map.put("info", "索隆");
map.put("img", R.drawable.i3);
list.add(map);
return list;
}
// ListView 贺 羽昌
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
Log.v("MyListView4-click", (String)mData.get(position).get("title"));
}
/**
* listview
*/
public void showInfo(){
new AlertDialog.Builder(this)
.setTitle("贺 羽昌listview")
.setMessage("羽哥...")
.setPositiveButton("羽哥", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.show();
}
public final class ViewHolder{
public ImageView img;
public TextView title;
public TextView info;
public Button viewBtn;
}
public class MyAdapter extends BaseAdapter{
private LayoutInflater mInflater;
public MyAdapter(Context context){
this.mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mData.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder=new ViewHolder();
convertView = mInflater.inflate(R.layout.vlist2, null);
holder.img = (ImageView)convertView.findViewById(R.id.img);
holder.title = (TextView)convertView.findViewById(R.id.title);
holder.info = (TextView)convertView.findViewById(R.id.info);
holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);
convertView.setTag(holder);
}else {
holder = (ViewHolder)convertView.getTag();
}
holder.img.setBackgroundResource((Integer)mData.get(position).get("img"));
holder.title.setText((String)mData.get(position).get("title"));
holder.info.setText((String)mData.get(position).get("info"));
holder.viewBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showInfo();
}
});
return convertView;
}
}
列表控件ListView
列表控件ListViewListView是一种用于垂直显示的列表控件,其类的继承结构如下:
ListView是比较常用的组件,它以列表的形式展示具体内容,如果ListView控件显示内容过多,则会出现垂直滚动条,并且它能够根据数据的长度自适应显示。列表的显示需要三个元素:
1.ListVeiw 用来展示列表的View。
2.适配器用来把数据映射到ListView上的中介。
3.数据,指被映射的字符串、图片或者基本组件。根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter。
ListView支持点击事件处理,用户可以用少量的代码实现复杂的选择功能。在布局文件中,用XML描述的ListView控件,代码如下:
ListView是一个经常用到的控件,ListView里面的每个子项Item可以使一个字符串,也可以是一个组合控件。先说说ListView的实现:
1.准备ListView要显示的数据 ;
2.使用 一维或多维 动态数组 保存数据;
3.构建适配器 , 简单地来说, 适配器就是 Item数组 , 动态数组 有多少元素就生成多少个Item;
4.把 适配器 添加到ListView,并显示出来。
适配器:
说道ListView就不得不说Adapter适配器,因为只有通过Adapter才可以把列表中的数据映射到ListView中,Android中Adapter可以这么理解的,是数据和视图之间的桥梁,数据在adapter中做处理,然后显示到视图上面。在android的开发中最Adapter
一共可以分为:
1.ArrayAdapter,
2.BaseAdapter,
3.CursorAdapter,
4.HeaderViewListAdapter,
5.ResourceCursorAdapter,
6.SimpleAdapter,
7.SimpleCursorAdapter,
8.WrapperListAdapter
ListView开发中:ArrayAdapter,SimpleAdapter和SimpleCursorAdapter
ArrayAdapter:它只能用于显示文字。
SimpleAdapter:它的功能非常强大。可以通过它自定义ListView中的item的内容,比如图片、多选框等。
SimpleCursorAdapter:在许多时候需要将数据库表中的数据显示在ListView、Gallery等组件中。虽然可以直接使用Adapter对象处理,但工作量很大。为此,Android
SDK提供了一个专用于数据绑定的Adapter类:SimpleCursorAdapter。
以下是一个简单的例子:
[b]ArrayAdapter:
[/b]
[b]
[/b]
public class MyListView extends Activity {
private ListView listView;
//private List<String> data = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
listView = new ListView(this);
listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,getData()));
setContentView(listView);
}
private List<String> getData(){
List<String> data = new ArrayList<String>();
data.add("漩涡鸣人");
data.add("宇智波止水");
data.add("黑崎一护");
data.add("波风水门");
data.add("奈良鹿丸");
data.add("山中井野");
return data;
}
}
SimpleAdapter:
例1
public class MyListView3 extends ListActivity {
// private List<String> data = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SimpleAdapter adapter = new SimpleAdapter(this,getData(),R.layout.vlist,
new String[]{"title","info","img"},
new int[]{R.id.title,R.id.info,R.id.img});
setListAdapter(adapter);
}
private List<Map<String, Object>> getData() {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();
map.put("title", "火影");
map.put("info", "漩涡鸣人");
map.put("img", R.drawable.i1);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "死神");
map.put("info", "黑崎一护");
map.put("img", R.drawable.i2);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "海贼王");
map.put("info", "索隆");
map.put("img", R.drawable.i3);
list.add(map);
return list;
}
}
例2:
private List<Map<String, Object>> mData;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mData = getData();
MyAdapter adapter = new MyAdapter(this);
setListAdapter(adapter);
}
private List<Map<String, Object>> getData() {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();
map.put("title", "火影");
map.put("info", "漩涡鸣人");
map.put("img", R.drawable.i1);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "死神");
map.put("info", "黑崎一护");
map.put("img", R.drawable.i2);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "海贼王");
map.put("info", "索隆");
map.put("img", R.drawable.i3);
list.add(map);
return list;
}
// ListView 贺 羽昌
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
Log.v("MyListView4-click", (String)mData.get(position).get("title"));
}
/**
* listview
*/
public void showInfo(){
new AlertDialog.Builder(this)
.setTitle("贺 羽昌listview")
.setMessage("羽哥...")
.setPositiveButton("羽哥", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.show();
}
public final class ViewHolder{
public ImageView img;
public TextView title;
public TextView info;
public Button viewBtn;
}
public class MyAdapter extends BaseAdapter{
private LayoutInflater mInflater;
public MyAdapter(Context context){
this.mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mData.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder=new ViewHolder();
convertView = mInflater.inflate(R.layout.vlist2, null);
holder.img = (ImageView)convertView.findViewById(R.id.img);
holder.title = (TextView)convertView.findViewById(R.id.title);
holder.info = (TextView)convertView.findViewById(R.id.info);
holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);
convertView.setTag(holder);
}else {
holder = (ViewHolder)convertView.getTag();
}
holder.img.setBackgroundResource((Integer)mData.get(position).get("img"));
holder.title.setText((String)mData.get(position).get("title"));
holder.info.setText((String)mData.get(position).get("info"));
holder.viewBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showInfo();
}
});
return convertView;
}
}
相关文章推荐
- Android UI系统控件进阶(二)—下拉列表控件Spinner,进度条ProgressBar,滑块控件SeekBar,评分控件RatingBar
- Android UI系统控件进阶(三)—自动完成文本控件AutoCompleteTextView详解及属性
- Android开发-UI控件:为ListView,GirdView,etc...添加系统自带的下拉刷新功能
- 说说 Android UI 中的 ListView(列表控件)
- Android UI控件详解-Spinner(下拉列表)
- 【Android 开发】:UI控件之 ListView 列表控件的使用(二)
- android UI控件之ListView详解之一listView+BaseAdpater
- android UI控件之ListView详解之一listView+ArrayAdpater
- Android列表控件ListView详解
- android UI控件之ListView详解之二listView+SimpleAdpater
- Android UI系统控件进阶(四)—网格视图控件GridView
- Android UI组件----ListView列表控件详解
- 【Android 开发】:UI控件之 ListView 列表控件的使用
- android UI进阶之实现listview中checkbox的多选与记录
- android UI进阶之实现listview中checkbox的多选与记录
- android UI进阶之实现listview的分页加载 推荐
- android UI进阶之实现listview的分页加载
- ListView控件演示03:如何在列表添加项的时候减少UI的刷新
- android UI进阶之实现listview的下拉加载
- Android UI 之TextView控件中可选择的属性列表,开发中经常用到的