一、直接使用ListVIEw组件创建
1.直接在XML中创建ListVIEw用entrIEs属性附上一个数组资源
其中divIDer属性是设置分割线可以使用颜色和drawable资源分割
<ListVIEw androID:ID="@+ID/ListVIEw1" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:divIDer="#33000000" androID:divIDerHeight="0.2dp" androID:footerdivIDersEnabled="true" androID:headerdivIDersEnabled="true" androID:entrIEs="@arrary/ctype"> </ListVIEw>
在values下定义一个数组资源文件arrays.xml
<resources><item >情景模式1</item><item >情景模式2</item> <item >情景模式3</item></resources>
2.创建ArrayAdapter指定要显示的列表项
在oncreat方法中关联适配器
simple_List_item_1:列表项为普通文本
simple_List_item_2:列表项为普通文本字体略大
simple_List_item_checked:列表项为一个已选中的
simple_List_item_multiple_choice:带有复选框的列表项
simple_List_item_single_choice:带有单选按钮的列表项
ListvIEw = (ListVIEw) findVIEwByID(R.ID.ListVIEw1); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromresource(this,R.array.ctype,androID.R.layout.simple_List_item_checked); ListvIEw.setAdapter(adapter);
二、让Activity继承ListActivity实现
public class ActivityMain extends ListActivity { @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String[] ctype ={"1","2","3"}; ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,androID.R.layout.simple_List_item_1,ctype); setlistadapter(adapter); } @OverrIDe protected voID onListItemClick(ListVIEw l,VIEw v,int position,long ID) { super.onListItemClick(l,v,position,ID); }}
三、SimpleAdapter和BaseAapter的使用(重点)
SimpleAdapter的使用
在main.xml中添加ListVIEw组件
编写用于布局列表项内容的布局文件items.xml
创建一个简单适配器与ListVIEw关联
<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:orIEntation="horizontal" androID:layout_wIDth="match_parent" androID:layout_height="match_parent"><ImageVIEw androID:ID="@+ID/image" androID:paddingRight="10px" androID:paddingtop="20px" androID:paddingBottom="20px" androID:adjustVIEwBounds="true" androID:maxWIDth="72px" androID:maxHeight="72px" androID:layout_height="wrap_content" androID:layout_wIDth="wrap_content"/> <TextVIEw androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:padding="10px" androID:layout_gravity="center" androID:ID="@+ID/Title" /> </linearLayout>
public class MainActivity extends Activity { @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.main); ListVIEw ListvIEw = (ListVIEw) findVIEwByID(R.ID.ListVIEw1); // 获取列表视图 int[] imageID = new int[] { R.drawable.img01,R.drawable.img02,R.drawable.img03,R.drawable.img04,R.drawable.img05,R.drawable.img06,R.drawable.img07,R.drawable.img08 }; // 定义并初始化保存图片ID的数组 String[] Title = new String[] { "保密设置","安全","系统设置","上网","我的文档","GPS导航","我的音乐","E-mail" }; // 定义并初始化保存列表项文字的数组 List<Map<String,Object>> ListItems = new ArrayList<Map<String,Object>>(); // 创建一个List集合 // 通过for循环将图片ID和列表项文字放到Map中,并添加到List集合中 for (int i = 0; i < imageID.length; i++) { Map<String,Object> map = new HashMap<String,Object>(); // 实例化Map对象 map.put("image",imageID[i]); map.put("Title",Title[i]); ListItems.add(map); // 将map对象添加到List集合中 } SimpleAdapter adapter = new SimpleAdapter(this,ListItems,R.layout.items,new String[] { "Title","image" },new int[] { R.ID.Title,R.ID.image }); // 创建SimpleAdapter ListvIEw.setAdapter(adapter); // 将适配器与ListVIEw关联 }}
三、BaseAdapter的使用及ListVIEw的优化
使用方法同上主要是BaseAdapter的使用更加灵活也更加强大,可以向其中添加其他控件。
<?xml version="1.0" enCoding="utf-8"?><relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent" > <ImageVIEw androID:ID="@+ID/imageVIEw1" androID:layout_wIDth="50dip" androID:layout_height="50dip" androID:layout_marginleft="5dip" androID:layout_margintop="5dip" androID:layout_marginBottom="5dip" androID:src="@androID:drawable/ic_lock_power_off" /> <TextVIEw androID:ID="@+ID/textVIEw1" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_above="@+ID/textVIEw2" androID:layout_toRightOf="@+ID/imageVIEw1" androID:text="name" androID:textcolor="#000000" androID:textSize="20sp" /> <TextVIEw androID:ID="@+ID/textVIEw2" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_alignBottom="@+ID/imageVIEw1" androID:layout_toRightOf="@+ID/imageVIEw1" androID:text="number" androID:textcolor="#000000" androID:textSize="20sp" /></relativeLayout>
public class MainActivity extends Activity { private ListVIEw lv; private List<MyInfo> infos; private Random random; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); lv = (ListVIEw) findVIEwByID(R.ID.ListVIEw1); infos = new ArrayList<MyInfo>();//通过for循环将name和number添加到List集合中 for (int i = 0; i < 100; i++) { MyInfo userInfo = new MyInfo(); userInfo.setname("name"+i); userInfo.setNumber("number"+i); infos.add(userInfo); System.out.println(userInfo.toString()); } lv.setAdapter(new MyAdapter()); } private class MyAdapter extends BaseAdapter{ @OverrIDe public int getCount() { return infos.size();//返回ListvIEw的长度 } @OverrIDe public VIEw getVIEw(int position,VIEw convertVIEw,VIEwGroup parent) { MyInfo userInfo = infos.get(position); VIEw vIEw; VIEwHolder holder; //减少内存中vIEw对象创建的次数 if (convertVIEw != null && convertVIEw instanceof relativeLayout) { vIEw = convertVIEw;//复用已经回收掉的vIEw对象 holder = (VIEwHolder) vIEw.getTag();//得到他们的引用 } else { vIEw = VIEw.inflate(getApplicationContext(),R.layout.item_layout,null);//把布局文件转化成VIEw对象 holder = new VIEwHolder(); //把ID存到存到holder对象中 //注意是在vIEw下findVIEwByID holder.iv = (ImageVIEw) vIEw.findVIEwByID(R.ID.imageVIEw1); holder.tv1 = (TextVIEw) vIEw.findVIEwByID(R.ID.textVIEw1); holder.tv2 = (TextVIEw) vIEw.findVIEwByID(R.ID.textVIEw2); vIEw.setTag(holder);//对象创建出来时找到他们的引用存到holder中 } holder.tv1.setText(infos.get(position).getname()); holder.tv2.setText(infos.get(position).getNumber()); return vIEw; } @OverrIDe public Object getItem(int position) { return null; } @OverrIDe public long getItemID(int position) { return 0; } } /* * vIEw对象的容器记录VIEw对象的内存地址相当于一个记事本 */ static class VIEwHolder{ TextVIEw tv1; TextVIEw tv2; ImageVIEw iv; }}public class MyInfo { private String name; private String number;//也可以添加Bitmap @OverrIDe public String toString() { return "MyInfo [name=" + name + ",number=" + number + "]"; } public String getname() { return name; } public voID setname(String name) { this.name = name; } public String getNumber() { return number; } public voID setNumber(String number) { this.number = number; }}
注意:(很多人不注意下面的这条语句是在vIEw下findVIEwByID,少了vIEw会造成空指针异常)
holder.iv = (ImageVIEw) vIEw.findVIEwByID(R.ID.imageVIEw1);
优化的原理就是动态循环复用已经回收掉的ListVIEw对象(回收后为convertvIEw),保持一个界面下的ListVIEw的条目数的动态平衡。(具体内容参考代码注释即可)
总结以上是内存溢出为你收集整理的实例讲解Android app开发中ListView的基本使用及优化全部内容,希望文章能够帮你解决实例讲解Android app开发中ListView的基本使用及优化所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)