首页 > 代码库 > 熟悉AndroidAPI系列15——ListView
熟悉AndroidAPI系列15——ListView
三个关键点
xml布局设置
数据和简单适配器
自定义适配器
XML布局
主Activity布局
ListView条目的XML布局
主Activity布局,只需要加入一个ListView控件,特别要注意各个控件的layout_width和layout_height的设定
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical"> 6 7 <LinearLayout 8 android:layout_width="fill_parent" 9 android:layout_height="wrap_content"10 android:orientation="horizontal">11 <TextView 12 android:text="@string/name"13 android:layout_width="1dp"14 android:layout_height="wrap_content"15 android:layout_weight="3"/>16 <TextView 17 android:text="@string/phone"18 android:layout_width="1dp"19 android:layout_height="wrap_content"20 android:layout_weight="5"/>21 <TextView 22 android:text="@string/account"23 android:layout_width="1dp"24 android:layout_height="wrap_content"25 android:layout_weight="2"/>26 </LinearLayout>27 28 <ListView 29 android:id="@+id/listView"30 android:layout_width="fill_parent"31 android:layout_height="fill_parent">32 33 </ListView>34 35 </LinearLayout>
示意图
条目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="wrap_content" android:orientation="horizontal" > <TextView android:id="@+id/name" android:layout_width="1dp" android:layout_height="wrap_content" android:layout_weight="3"/> <TextView android:id="@+id/phone" android:layout_width="1dp" android:layout_height="wrap_content" android:layout_weight="5"/> <TextView android:id="@+id/account" android:layout_width="1dp" android:layout_height="wrap_content" android:layout_weight="2"/> </LinearLayout>
数据和简单数据适配器
数据形式为Cursor 结果集形式及相应的SimpleCursorAdapter
数据形式为List< ?extendsMap< String,? > >及相应的SimpleAdapter
Cursor和SimpleCursorAdapter
private void showListView(Uri uri) { ContentResolver resolver = MainActivity.this.getContentResolver(); cursor = resolver.query(uri, null, null, null, "_id desc limit 0,20"); //给listView绑定适配器 SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.item, cursor, new String[]{"name", "phone", "account"}, new int[]{R.id.name, R.id.phone, R.id.account}, 1); listView.setAdapter(adapter); }
List< ?extendsMap< String,? > >及SimpleAdapter
private void otherShowListView(Uri uri) { ContentResolver resolver = MainActivity.this.getContentResolver(); cursor = resolver.query(uri, null, null, null, "_id desc limit 0,50"); //数据存储形式为List< ?extendsMap< String,? > > data; List< HashMap<String,Object> > data = http://www.mamicode.com/new ArrayList<HashMap<String,Object> >(); while(cursor.moveToNext()){ HashMap<String, Object> item = new HashMap<String, Object>(); item.put("name", cursor.getString(cursor.getColumnIndex("name"))); item.put("phone", cursor.getString(cursor.getColumnIndex("phone"))); item.put("account", cursor.getString(cursor.getColumnIndex("account"))); data.add(item); } SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item, new String[]{"name", "phone", "account"}, new int[]{R.id.name, R.id.phone, R.id.account}); listView.setAdapter(adapter); }
自定义适配器
ListView视图的创建过程
- 首先调用适配器的getCount得到共有n个条目
- 然后根据每个条目的高度计算出页面可以容纳perPage个条目
- 然后为这perPage个条目通过调用getView对象创建出perPage个View控件
- ListView是具有缓存功能的,即只会创建perPage个View,当上下移动时,新出现的View使用暂时看不到的View控件(改变其中的数据)
1 private void showListView3(){ 2 final List<Person> dataList = pService.getScrollDate1(0, 30); 3 listView.setAdapter(new BaseAdapter() { 4 @Override 5 public View getView(int position, View convertView, ViewGroup parent) { 6 ViewCache vCache; 7 //如果该View控件为空,初始化 8 if(convertView == null){ 9 convertView = MainActivity.this.getLayoutInflater().inflate(R.layout.item, null);10 vCache = new ViewCache();11 /**12 * 每次findView会降低性能,所以希望只在第一次创建View对象时执行find操作13 */14 vCache.name = (TextView) convertView.findViewById(R.id.name);15 vCache.phone = (TextView) convertView.findViewById(R.id.phone);16 vCache.account = (TextView) convertView.findViewById(R.id.account);17 convertView.setTag(vCache);18 }19 vCache = (ViewCache) convertView.getTag();20 vCache.name.setText(dataList.get(position).getName());21 vCache.phone.setText(dataList.get(position).getPhone());22 vCache.account.setText(dataList.get(position).getAccount()+"");23 24 return convertView;25 }26 @Override27 public long getItemId(int position) {28 return position;29 }30 @Override31 public Object getItem(int position) {32 return dataList.get(position);33 }34 35 @Override36 public int getCount() {37 return dataList.size();38 }39 });40 }
熟悉AndroidAPI系列15——ListView
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。