android之ListView自定义布局
16lz
2021-01-24
前面总结了如何应用android自带的布局到ListView中去,现在如果想让自己的ListView更生动,只需要将自己定义的布局应用到ListView中,在布局中添加一些生动的元素,比如,图标。
一、为ListView每个item添加一个图标
先看效果:
首先定义一个entry.xml布局文件:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="60dp"android:orientation="horizontal" ><!-- 图标 --><ImageView android:layout_width="48dp" android:layout_height="48dp" android:src="@drawable/preview" android:layout_gravity="center" android:layout_marginLeft="10dp" /><!-- 这里引用android自带的布局simple_list_item_1 --><include layout="@android:layout/simple_list_item_1" /></LinearLayout>
然后将此布局文件应用到ListView中去:
public class ListViewDemo extends ListActivity {private List<Map<String,String>> data = new ArrayList<Map<String,String>>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Map<String, String> map1 = new HashMap<String, String>(); map1.put("姓名", "A君"); data.add(map1); Map<String, String> map2 = new HashMap<String, String>(); map2.put("姓名", "B君"); data.add(map2); setListAdapter(new SimpleAdapter(this,data,R.layout.entry, new String[]{"姓名"}, new int[]{android.R.id.text1} )); }
二、动态设置图标
以上例子,处理的非常简单,全部图标都一样,现在要想动态设置每个item中元素,需要继承Adapter子类,通过重写getView()函数,为每个item都设置不同的风格。
下面创建BaseAdapter的子类MyAdapter:
private class MyAdapter extends SimpleAdapter{ //icons存储图标的id private int[] icons = null; private Context context;public MyAdapter(Context context, List<? extends Map<String, ?>> data,int resource, String[] from, int[] to,int[] icons) {super(context, data, resource, from, to);// TODO Auto-generated constructor stubthis.icons = icons;//传入存储图标id的数组this.context = context;}/* (non-Javadoc) * 重写getView函数,由于SimpleAdapter能处理TextView,仅仅是不能设置图标 */所以,只需要在调用父类的getView函数的基础上,设置上相应的图标即可@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubViewHolder holder = null;if(convertView == null){holder = new ViewHolder();convertView = super.getView(position, convertView, parent);//调用父类的getView函数,设置TextViewholder.imageView = (ImageView)convertView.findViewById(R.id.myimageview);convertView.setTag(holder);}else {holder = (ViewHolder)convertView.getTag();}//从icons中随机选出一个,并设置作为item的图标Random random = new Random();int index = random.nextInt(icons.length);holder.imageView.setImageResource(icons[index]);return convertView;}private class ViewHolder{ImageView imageView;} }
MyAdapter继承自SimpleAdapter,重写getView()函数,使listView中每个item的图标都是随机选择的。对MyAdapter的应用如下:
//数组存储图标idprivate int[] myicons = { R.drawable.preview,R.drawable.preview1,R.drawable.preview2,R.drawable.preview3};
setListAdapter(new MyAdapter(this, data, R.layout.entry, new String[]{"姓名"}, new int[]{android.R.id.text1}, myicons));//为ListView设置MyAdapter适配器
上图:
更多相关文章
- C语言函数的递归(上)
- android中添加AT命令流程(转载)
- Android(安卓)分辨率与屏幕适配
- 一篇文章看明白 Android(安卓)从点击应用图标到界面显示的过程
- Android五大布局详解——LinearLayout(线性布局)
- Android布局优化总结
- Android(安卓)HAL的STUB的具体处理
- Android实现自定义带文字和图片的Button
- 传智播客Android视频教程——第三天