博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[置顶] 安卓UI组件之ListView详解
阅读量:5327 次
发布时间:2019-06-14

本文共 4967 字,大约阅读时间需要 16 分钟。

ListView是很常见的一个UI组件,在许多App中都很常用,其意思就是可滚动的列表,使用ListView必须使用Adapter(适配器),常用的适配器友谊ArrayAdapter,SimpleAdapter,BaseAdapter.

ListView一些特殊的属性是:

android:divider="@drawable/red"//每个列表项之间的分割线

android:entries="@drawable/books"//列表项显示的数据

布局代码示例:

<ListView

android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:divider="@drawable/red"
android:entries="@drawable/books">
</LIstView>

第一我们使用SimpleAdapter来写一个ListView:

public class SimpleAdapter extends Activity{private String[] names =new String[]{"nick","lebron","kobe","kevin"};private int[] imgsIds[] =new Int[] {R.drawable.1,R.drawable.2,R.drawable.3,R.drawable.4};@Overridepublic void onCreate(Bundle savedInsatnceState){super.onCreate(savedInsatnceState);setTitle("simpleadapter");setContentView(R.layout.main);List
list=new ArrayList
();//创建动态数组ArrayListfor(int i=0;i
map=new HashMap=
;map.put("name",names[i]);map.put("headerImg",imgsIds[i]);list.add(map);}SimpleAdapter adapter=new SimpleAdaper(this,list,R.layout.main,new String[]{"name","headerImg"},new int[]{R.id.name,R.id.headerImg});ListView list=(ListView)findViewById(R.id.mylist);list.setAdaper(adapter);}}

*注释*
SimpleAdapter是另一种常见的adapter类型,其有五个参数
1:Activity.this
2:传入的数据
3:数据传入的界面
4:数据中Map类型数据的String 类的key
5:穿入界面的组件的Id
**

 

第二种我们使用ArrayAdapter:代码不详解,只是重写Adapter:

 

String[] str={"china","america","japan"};List list=new ArrayList
();for(int i=0;i
adapter=new ArrayAdapter
(this,R.layout.simple_list_item2,list);

*注释*

 

第三个属性指定要显示每一个ListItem的风格:

ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,R.layout.simple_list_item1,list);:普通文本框

ArrayAdapter<String> adapter=new ArrayAdapetr<String>(this,R.layout.simple_list_multiple_choice);:多选框
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,R.layout.simple_list_single_choice);:单选框

**

另外,ListView还有一个拓展组件ExpandableListView,就是可拓展的列表,但是他的适配器必须使用ExpandableAdapter:

public class ExpandableListViewTest extends Activity{	@Override	public void onCreate(Bundle savedInstanceState)	{		super.onCreate(savedInstanceState);		setContentView(R.layout.main);		//创建一个BaseExpandableListAdapter对象		ExpandableListAdapter adapter = new BaseExpandableListAdapter()		{			int[] logos = new int[]			{				R.drawable.p,				R.drawable.z,				R.drawable.t			}; 			private String[] armTypes = new String[]				{ "神族兵种", "虫族兵种", "人族兵种"};			private String[][] arms = new String[][]			{				{ "狂战士", "龙骑士", "黑暗圣堂", "电兵" },				{ "小狗", "刺蛇", "飞龙", "自爆飞机" },				{ "机枪兵", "护士MM" , "幽灵" }			};			//获取指定组位置、指定子列表项处的子列表项数据			@Override			public Object getChild(int groupPosition, int childPosition)			{				return arms[groupPosition][childPosition];			}			@Override			public long getChildId(int groupPosition, int childPosition)			{				return childPosition;			}			@Override			public int getChildrenCount(int groupPosition)			{				return arms[groupPosition].length;			}			private TextView getTextView()			{				AbsListView.LayoutParams lp = new AbsListView.LayoutParams(						ViewGroup.LayoutParams.FILL_PARENT, 64);				TextView textView = new TextView(ExpandableListViewTest.this);				textView.setLayoutParams(lp);				textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);				textView.setPadding(36, 0, 0, 0);				textView.setTextSize(20);				return textView;			}			//该方法决定每个子选项的外观			@Override			public View getChildView(int groupPosition, int childPosition,					boolean isLastChild, View convertView, ViewGroup parent)			{				TextView textView = getTextView();							textView.setText(getChild(groupPosition, childPosition).toString());				return textView;			}			//获取指定组位置处的组数据			@Override			public Object getGroup(int groupPosition)			{				return armTypes[groupPosition];			}			@Override			public int getGroupCount()			{				return armTypes.length;			}			@Override			public long getGroupId(int groupPosition)			{				return groupPosition;			}			//该方法决定每个组选项的外观			@Override			public View getGroupView(int groupPosition, boolean isExpanded,					View convertView, ViewGroup parent)			{				LinearLayout ll = new LinearLayout(ExpandableListViewTest.this);				ll.setOrientation(0);				ImageView logo = new ImageView(ExpandableListViewTest.this);				logo.setImageResource(logos[groupPosition]);				ll.addView(logo);				TextView textView = getTextView();				textView.setText(getGroup(groupPosition).toString());								ll.addView(textView);							return ll;			}			@Override			public boolean isChildSelectable(int groupPosition, int childPosition)			{				return true;			}			@Override			public boolean hasStableIds()			{				return true;			}		};		ExpandableListView expandListView = (ExpandableListView)			findViewById(R.id.list);		expandListView.setAdapter(adapter);	}}

使用ExpandableAdapter,我们重新首先重写其中的一些方法,每一个getGroupView就是显示的每一个ListGroupItem(列表项),其中重写的getGroupCount方法放回的就是有多少列表项,而getChildView()就是显示每一个子列表项,同理getChildCount()每一个列表项里面的子列表项个数。

 

 

转载于:https://www.cnblogs.com/jiangu66/p/3165464.html

你可能感兴趣的文章
给C#学习者的建议 - CLR Via C# 读后感
查看>>
Recover Binary Search Tree
查看>>
Java 实践:生产者与消费者
查看>>
[转]IOCP--Socket IO模型终结篇
查看>>
js 获取视频的第一帧
查看>>
各种正则验证
查看>>
观察者模式(Observer)
查看>>
python中numpy.r_和numpy.c_
查看>>
egret3D与2D混合开发,画布尺寸不一致的问题
查看>>
freebsd 实现 tab 命令 补全 命令 提示
查看>>
struts1和struts2的区别
查看>>
函数之匿名函数
查看>>
shell习题第16题:查用户
查看>>
Redis常用命令
查看>>
2018.11.06 bzoj1040: [ZJOI2008]骑士(树形dp)
查看>>
2019.02.15 bzoj5210: 最大连通子块和(链分治+ddp)
查看>>
redis cluster 集群资料
查看>>
微软职位内部推荐-Sr. SE - Office incubation
查看>>
微软职位内部推荐-SOFTWARE ENGINEER II
查看>>
centos系统python2.7更新到3.5
查看>>