标签:
XML 代码:
<ListView android:id="@+id/mylistView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/ctype">
</ListView>
常用属性:
android:divider 用于为列表实例设置分隔条,可以用颜色分隔,也可以用Drawable资源分隔
android:dividerHeight 用于设置分隔条的高度
android:entries 列表的数据源
android:footerDividerEnabled 用于设置是否在 footer View 之前绘制分隔条,默认值为
true,设置为 false 時,表示不会绘制,使用该属性时,需要通过 LiswView 组件提供的
addFooterView()方法为 ListView 设置 footer View
android:headerDividersEnabled 用于设置是否在 header View 之后绘制分隔条, 默认
值为 true,设置为 false 時,表示不会绘制,使用该属性时需要通过 LiswView 组件提供的
addHeaderView()方法为 ListView 设置 header View
1.ArrayAdapter :
数据源为数组或集合
构造器:new ArrayAdapter(this,xml,数据源);
String [] ctype={};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item1, ctype);
ArrayAdapter<CharSequence>
adapter2=ArrayAdapter.createFromResource(this, R.array.ctype,
android.R.layout.simple_list_item1);
2.SimpleAdapter:
数据源为 List<Map<String,?>>
构 造 器 : new SimpleAdapter(this, 数 据 源 ,xml,new String[]{key1,key2},new
int[]{R.id.image,R.id.textview});
说明:
①key 为数据源 Map 的键
②String[]和 int[]必须一一对应
android.R.layout.simple_list_item_multiple_choice:每个列表项目都带多选框文本
android.R.layout.simple_list_item_1 每个列表项都是一个普通的文本
android.R.layout.simple_list_item_2 每个列表项都是一个普通的文本(字体略大)
android.R.layout.simple_list_item_checked 每个列表项都有一个已勾选的列表项
android.R.layout.simple_list_item_single_choice 每个列表项都是带单选按钮的文本
常用的监听方法
listView.setOnItemClickListener(new OnItemClickListener()
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
String res = parent.getItemAtPosition(position).toString();
Toast.makeText(MainActivity.this, res, Toast.LENGTH_SHORT).show();
}
});
Adapter 和 和 AdapterView 区别
Adapter:根据给定的数据源分配一个布局
AdapterView:为 Adapter
提供一个 View(ListView,GridView,Spinner)
说明
去掉 ListView 滚动条的方法
lv.setVerticalScrollBarEnabled(false);
去掉 ListView 分割线的方法
lv.setDivider(null);
系统显示列表(ListView)时,首先会实例化一个适配器,本文将实例化一个自定义
的适配器。实现自定义适配器,必须手动映射数据,这时就需要重写 getView()方法,系统在绘制列表的每
一行的时候将调用此方法。
ListView 在开始绘制的时候,系统自动调用 getCount()函数,根据函数返回值得到 ListView的长度,
然后根据这个长度,调用 getView()逐一画出每一行。
具体使用方法可以参考下面代码,只需记住
1.创建一个类,继承 BaseAdapter 2.重写方法
@Override
public int getCount() {
// 返回数据源的大小
return getList().size();
}
@Override
public Object getItem(int position) {
// 根据 position 返回一个 item 对象
return getList().get(position);
}
@Override
public long getItemId(int position) {
//根据 position 返回行数
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//浪费资源的错误写法
// LayoutInflater inflater = getLayoutInflater();
// View view = inflater.inflate(R.layout.items, null);
// TextView tv = (TextView) view.findViewById(R.id.textView1);
// tv.setText(getList().get(position));
// System.out.println("position-->" + position);
//正确写法
View view = null;
if(convertView == null){
LayoutInflater inflater = getLayoutInflater();
view = inflater.inflate(R.layout.items, null);
}else{
//如果 convertView 不为空,说明该 view 之前加载进来过,所以直接将其赋给 view,即反复
使用,避免再创建新的 view 浪费资源
view = convertView;
}
TextView tv = (TextView) view.findViewById(R.id.textView1);
tv.setText(getList().get(position));
System.out.println("position-->" + position);
return view;
}
【扩展】ListActivity
一、定义:一个包含 ListView 的 Activity
二、使用:
1.不需要定义 xml 布局文件
2.在 Activity 的 onCreate()方法中,不需要 setContentView()方法
3.使用方式与 ListView 方式类似,注意设置 Adapter 时,使用的是 setListAdapter 方法
比如:setListAdapter(adapter);
4.添加点击事件
①设置监听器
getListView.setOnItemClickListener()...
②使用回调方法
onListItemClick()
public class MainActivity extends ListActivity {
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 创建用于 ListView 指定列表项的适配器
String[] ctype = new String[] { "情景模式", "主题模式", "手机", "程序
管理" };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, andro
id.R.layout.simple_list_item_1, ctype);
setListAdapter(adapter);
}
}
【扩展】ExpandableListView
功能:是一个二级列表,分为 group 和 child,group 表示一级列表,child 表示二级列表
和 ListView 不同的是它是一个两级的滚动列表视图,每一个组可以展开,显示一些子项,
这些项目来至于ExpandableListAdapter的子类,也就是说,要实现向里面添加项目,必须写一个
子类实现 ExpandableListAdapter 的接口或者使用系统为我们实现在子类
BaseExpandableListAdapter,
SimpleExpandableListAdapter
适配器
// 数据
private List<String> groupData;// 定义组数据
private List<List<String>> childrenData;// 定义组中的子数据
// 上下文
private Context context;
// 布局文件加载器
private LayoutInflater inflater;
/**
* 构造器
*
* @param groupData
* @param childrenData
* @param context
*/
public MyExpandableListAdapter(List<String> groupData, List<List<Strin
g>> childrenData, Context context) {
super();
this.groupData = groupData;
this.childrenData = childrenData;
this.context = context;
this.inflater = LayoutInflater.from(context);
}
/**
* 得到组的数量
*/
@Override
publicint getGroupCount() {
returngroupData != null ? groupData.size() : 0;
}
/**
* 得到哪一组下面的子类个数
*/
@Override
public int getChildrenCount(intgroupPosition) {
returnchildrenData.get(groupPosition) != null ? childrenData.get(gr
oupPosition).size() : 0;
}
/**
* 得到组
*/
@Override
public Object getGroup(intgroupPosition) {
returnthis.groupData.get(groupPosition);
}
/**
* 得到组下面的子项
*/
@Override
public Object getChild(intgroupPosition, intchildPosition) {
returnthis.childrenData.get(groupPosition).get(childPosition);
}
/**
* 得到组位置
*/
@Override
publiclong getGroupId(intgroupPosition) {
returngroupPosition;
}
/**
* 组下面的子项位置
*/
@Override
publiclong getChildId(intgroupPosition, intchildPosition) {
returnchildPosition;
}
@Override
publicboolean hasStableIds() {
returnfalse;
}
@Override
public View getGroupView(intgroupPosition, booleanisExpanded, View conv
ertView, ViewGroup parent) {
TextView tv = null;
if (convertView == null) {
tv = (TextView) inflater.inflate(android.R.layout.simple_list_i
tem_1,null);
convertView = tv;
} else {
tv = (TextView) convertView;
}
// 设置数据
tv.setText(" "+groupData.get(groupPosition));
returntv;
}
@Override
publicView getChildView(intgroupPosition, intchildPosition, booleanisLa
stChild, View convertView,
ViewGroup parent) {
TextView tv = null;
if (convertView == null) {
tv = (TextView) inflater.inflate(android.R.layout.simple_list_i
tem_1,null);
convertView = tv;
} else {
tv = (TextView) convertView;
}
// 设置数据
tv.setText(" "+childrenData.get(groupPosition).get(childPosit
ion));
return tv;
}
/**
* //child 是否可以被点击,true 可以点,false 不可以点
*/
@Override
publicboolean isChildSelectable(intgroupPosition, intchildPosition) {
return true;
}
监听器
OnChildClickListener:单击 child 会触发该监听器
exListView.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
Toast.makeText(getApplicationContext()
, child.get(groupPosition).get(childPosition) + "", Toast.LENGTH_SHORT).show();
return false;
}
});
安卓017ListView & GridView & ScrollView
标签:
原文地址:http://blog.csdn.net/opera95/article/details/51360221