专注移动互联网.docx
《专注移动互联网.docx》由会员分享,可在线阅读,更多相关《专注移动互联网.docx(24页珍藏版)》请在冰豆网上搜索。
专注移动互联网
专注移动互联网
分类:
android游戏与软件开发锦集2011-07-2623:
173471人阅读评论(33)收藏举报
Android软件开发之ListView详解
雨松MOMO原创文章如转载,请注明:
转载自雨松MOMO的博客原文地址:
ListView的使用方法
ListView是Android软件开发中非常重要组件之一,基本上是个软件基本都会使用ListView,今天我通过一个demo来教大家怎么样使用ListView组件绘制出漂亮的列表,说道ListView就不得不说Adapter适配器,因为只有通过Adapter才可以把列表中的数据映射到ListView中。
在android的开发中最Adapter一共可以分为
ArrayAdapter,
BaseAdapter,
CursorAdapter,
HeaderViewListAdapter,
ResourceCursorAdapter,
SimpleAdapter,
SimpleCursorAdapter,
WrapperListAdapter
软件开发中最常用的有ArrayAdapter, BaseAdapter, SimpleAdapter,今天我用一段代码向大家诠释如何使用ListView控件。
1.简单的ListView
在List列表中如果不存在过于复杂的东西我们可以直接去newArrayAdapter()来绘制列表,无须继承ArrayAdapter,重写它的方法。
但是如果列表中过于复杂的话就需要使用自定义布局来实现List列表。
1.public class SimpleList extends ListActivity {
2. private String[] mListStr = {"姓名:
雨松MOMO","性别:
男","年龄:
25","居住地:
北京","邮箱:
xuanyusong@"};
3. ListView mListView = null;
4. @Override
5. protected void onCreate(Bundle savedInstanceState) {
6. mListView = getListView();
7. setListAdapter(new ArrayAdapter(this,
8. android.R.layout.simple_list_item_1, mListStr));
9. mListView.setOnItemClickListener(new OnItemClickListener() {
10. @Override
11. public void onItemClick(AdapterView
> adapterView, View view, int position,
12. long id) {
13. Toast.makeText(SimpleList.this,"您选择了" + mListStr[position], Toast.LENGTH_LONG).show();
14. }
15. });
16.
17. super.onCreate(savedInstanceState);
18. }
19.}
2.带标题的ListView列表
使用simpleAdapter需要注意的是须要用Mapitem来保存列表中每一项的显示的title与text,newSimpleAdapter的时候将map中的数据写入,程序就会帮我们绘制列表了。
1.public class TitleList extends ListActivity {
2. private String[] mListTitle = { "姓名", "性别", "年龄", "居住地","邮箱"};
3. private String[] mListStr = { "雨松MOMO", "男", "25", "北京",
4. "xuanyusong@" };
5. ListView mListView = null;
6. ArrayList
7.
8. @Override
9. protected void onCreate(Bundle savedInstanceState) {
10. mListView = getListView();
11.
12. int lengh = mListTitle.length;
13. for(int i =0; i < lengh; i++) {
14. Map item = new HashMap();
15. item.put("title", mListTitle[i]);
16. item.put("text", mListStr[i]);
17. mData.add(item);
18. }
19. SimpleAdapter adapter = new SimpleAdapter(this,mData,android.R.layout.simple_list_item_2,
20. new String[]{"title","text"},new int[]{android.R.id.text1,android.R.id.text2});
21. setListAdapter(adapter);
22. mListView.setOnItemClickListener(new OnItemClickListener() {
23. @Override
24. public void onItemClick(AdapterView
> adapterView, View view, int position,
25. long id) {
26. Toast.makeText(TitleList.this,"您选择了标题:
" + mListTitle[position] + "内容:
"+mListStr[position], Toast.LENGTH_LONG).show();
27. }
28. });
29. super.onCreate(savedInstanceState);
30. }
31.}
3.带图片的ListView列表
使用simpleAdapter来操作但是构造simpleAdapter的时候须要使用我们自己写的布局来完成,因为系统的布局已经不能满足需求了,同样Mapitem来保存列表中每一项须要的显示内容如图片标题内容等。
添加我们自己的列表布局图片标题内容
1.
xml version="1.0" encoding="utf-8"?
>
2.
3.android="
4. android:
layout_width="fill_parent" android:
layout_height="?
android:
attr/listPreferredItemHeight">
5. id="@+id/image"
6. android:
layout_width="wrap_content" android:
layout_height="fill_parent"
7. android:
layout_alignParentTop="true" android:
layout_alignParentBottom="true"
8. android:
adjustViewBounds="true"
9. android:
padding="2dip" />
10. id="@+id/title"
11. android:
layout_width="wrap_content" android:
layout_height="wrap_content"
12. android:
layout_toRightOf="@+id/image"
13. android:
layout_alignParentRight="true" android:
layout_alignParentTop="true"
14. android:
layout_above="@+id/text"
15. android:
layout_alignWithParentIfMissing="true" android:
gravity="center_vertical"
16. android:
textSize="15dip" />
17. id="@+id/text"
18. android:
layout_width="fill_parent" android:
layout_height="wrap_content"
19. android:
layout_toRightOf="@+id/image"
20. android:
layout_alignParentBottom="true"
21. android:
layout_alignParentRight="true" android:
singleLine="true"
22. android:
ellipsize="marquee"
23. android:
textSize="20dip" />
24.
1.public class IconList extends ListActivity {
2. private String[] mListTitle = { "姓名", "性别", "年龄", "居住地","邮箱"};
3. private String[] mListStr = { "雨松MOMO", "男", "25", "北京",
4. "xuanyusong@" };
5. ListView mListView = null;
6. ArrayList> mData= new ArrayList>();;
7.
8. @Override
9. protected void onCreate(Bundle savedInstanceState) {
10. mListView = getListView();
11.
12. int lengh = mListTitle.length;
13. for(int i =0; i < lengh; i++) {
14. Map item = new HashMap();
15. item.put("image", R.drawable.jay);
16. item.put("title", mListTitle[i]);
17. item.put("text", mListStr[i]);
18. mData.add(item);
19. }
20. SimpleAdapter adapter = new SimpleAdapter(this,mData,R.layout.iconlist,
21. new String[]{"image","title","text"},new int[]{R.id.image,R.id.title,R.id.text});
22. setListAdapter(adapter);
23. mListView.setOnItemClickListener(new OnItemClickListener() {
24. @Override
25. public void onItemClick(AdapterView
> adapterView, View view, int position,
26. long id) {
27. Toast.makeText(IconList.this,"您选择了标题:
" + mListTitle[position] + "内容:
"+mListStr[position], Toast.LENGTH_LONG).show();
28. }
29. });
30. super.onCreate(savedInstanceState);
31. }
32.}
4.自定义布局BaseAdapter修改列表颜色
因为通过直接构造系统的布局来绘制列表方法肯定是有限的,所以我们需要重写绘制方法,写一个类去继承BaseAdapter并实现这个类中的方法,listView在一开始绘制的时候首先会调用getCout()方法得到绘制次数,然后会实例化自己定义的BaseAdapter通过getView()方法一层一层绘制ListView,所以我们可以在这里面根据position(当前绘制的ID)来任意的修改绘制的内容,做出好看漂亮的ListView,下面这个例子我通过重写getView修改每个列表的颜色并且实现用户选中后成高亮状态。
1.
xml version="1.0" encoding="utf-8"?
>
2.
3.android="
4. android:
layout_width="fill_parent" android:
layout_height="wrap_content">
5. id="@+id/color_image"
6. android:
layout_width="wrap_content" android:
layout_height="fill_parent"
7. android:
layout_alignParentTop="true" android:
layout_alignParentBottom="true"
8. android:
adjustViewBounds="true"
9. android:
padding="2dip" />
10. id="@+id/color_title"
11. android:
layout_width="fill_parent" android:
layout_height="wrap_content"
12. android:
layout_toRightOf="@+id/color_image"
13. android:
layout_alignParentBottom="true"
14. android:
layout_alignParentRight="true" android:
singleLine="true"
15. android:
ellipsize="marquee"
16. android:
textSize="15dip" />
17. id="@+id/color_text"
18. android:
layout_width="fill_parent" android:
layout_height="wrap_content"
19. android:
layout_toRightOf="@+id/color_image"
20. android:
layout_below="@+id/color_title"
21. android:
layout_alignParentBottom="true"
22. android:
layout_alignParentRight="true"
23. android:
singleLine="true"
24. android:
ellipsize="marquee"
25. android:
textSize="20dip" />
26.
27.
28.
1.public class ColorList extends ListActivity {
2. private String[] mListTitle = { "姓名", "性别", "年龄", "居住地","邮箱"};
3. private String[] mListStr = { "雨松MOMO", "男", "25", "北京",
4. "xuanyusong@" };
5. ListView mListView = null;
6. MyListAdapter myAdapter = null;
7. @Override
8. protected void onCreate(Bundle savedInstanceState) {
9. mListView = getListView();
10. myAdapter = new MyListAdapter(this);
11. setListAdapter(myAdapter);
12. mListView.setOnItemClickListener(new OnItemClickListener() {
13. @Override
14. public void onItemClick(AdapterView
> adapterView, View view, int position,
15. long id) {
16. View v=adapterView.getChildAt(position);
17. v.setBackgroundColor(Color.RED);
18. Toast.makeText(ColorList.this,"您选择了" + mListStr[position], Toast.LENGTH_LONG).show();
19. }
20. });
21.
22. super.onCreate(savedInstanceState);
23. }
24.
25. class MyListAdapter extends BaseAdapter {
26. private int[] colors = new int[] { 0xff626569, 0xff4f5257 };
27. public MyListAdapter(Context context) {
28. mContext = context;
29. }
30.
31. public int getCount() {
32. return mListStr.length;
33. }
34.
35. @Override
36. public boolean areAllItemsEnabled() {
37. return false;
38. }
39.
40. public Object getItem(int position) {
41. return position;
42. }
43.
44. public long getItemId(int position) {
45. return