您的位置:首页 > 移动开发 > Android开发

Android中ListView使用总结

2016-05-30 19:21 411 查看
在android开发中,ListView是比较常用的组件,以列表形式展示具体内容,并根据数据长度自适应显示Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。简单的ListView使用这里不赘述,这里说下ListView自定义数据和自定义adapter时的较复杂点的使用,作抛砖引玉先上最终效果图,左面是一个图片,右面有一些文字描述主视图布局配置是这样的,只呈现一个ListView<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="@dimen/activity_horizontal_margin"tools:context="com.xuexi.zhaoyun.testadapter.CustomListView"><ListViewandroid:id="@+id/customListView"android:layout_width="match_parent"android:layout_height="match_parent"></ListView></LinearLayout>先自定义一个数据类
package com.xuexi.zhaoyun.testadapter;//自定义列表项数据类public class CustomListCellData {public String name = "";public String dec = "";public int iconId = 0;public CustomListCellData(String userName, String dec, int iconId) {this.name = userName;this.dec = dec;this.iconId = iconId;}public String getUserName() {return name;}public void setUserName(String userName) {this.name = userName;}public String getDec() {return dec;}public void setDec(String dec) {this.dec = dec;}public int getIconId() {return iconId;}public void setIconId(int iconId) {this.iconId = iconId;}}
定义一个列表项的布局<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><ImageViewandroid:id="@+id/cion"android:layout_width="100dp"android:layout_height="100dp" /><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="100dp"android:layout_weight="1"android:gravity="center_vertical"android:orientation="vertical"><TextViewandroid:id="@+id/name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Large Text"android:textAppearance="?android:attr/textAppearanceLarge" /><TextViewandroid:id="@+id/dec"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Small Text"android:textAppearance="?android:attr/textAppearanceSmall" /></LinearLayout></LinearLayout>接下来就可以自定义adapter了,比较难理解的是getViewpackage com.xuexi.zhaoyun.testadapter;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;public class CustomListViewAdapter extends BaseAdapter {private Context context;public CustomListViewAdapter(Context context) {this.context = context;}public Context getContext() {return context;}//定义数据源private CustomListCellData[] data = new CustomListCellData[]{new CustomListCellData("小李", "是个歌手", R.drawable.ai_logo),new CustomListCellData("小王", "是个学生", R.drawable.bat_logo),new CustomListCellData("小魏", "是个屌丝", R.drawable.html_logo),new CustomListCellData("小薛", "是个闷骚男", R.drawable.z_logo),};@Overridepublic int getCount() {return data.length;}@Overridepublic CustomListCellData getItem(int i) {return data[i];}@Overridepublic long getItemId(int i) {return i;}//用于构建最终展示在ListView里的每一项@Overridepublic View getView(int i, View view, ViewGroup viewGroup) {/*** 这里需要解析自定义的用于展示每一个列表项的布局,并给相关组件赋值* 这里使用的是一个Android提供的优化机制,减少getView的触发次数,减少内存消耗* View是由getView创建但不在使用被系统回收的组件*/LinearLayout ll = null;if (view!=null){ll = (LinearLayout) view;}else {ll = (LinearLayout) LayoutInflater.from(getContext()).inflate(R.layout.custom_listcell, null);}//先取到这一列表项的数据CustomListCellData data = getItem(i);ImageView icon = (ImageView) ll.findViewById(R.id.cion);TextView name = (TextView) ll.findViewById(R.id.name);TextView dec = (TextView) ll.findViewById(R.id.dec);//给布局里的相关组件设置数据icon.setImageResource(data.iconId);name.setText(data.name);dec.setText(data.dec);return ll;}}主视图代码非常简单package com.xuexi.zhaoyun.testadapter;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.widget.ListView;public class CustomListView extends AppCompatActivity {private ListView customListView;@Overrideprotected void onCreate(Bundle savedInstance99daState) {super.onCreate(savedInstanceState);setContentView(R.layout.custom_list_view);customListView = (ListView) findViewById(R.id.customListView);customListView.setAdapter(new CustomListViewAdapter(this));}}以上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息