在android开发中,ListView是比较常用的组件,以列表形式展示具体内容,并根据数据长度自适应显示

Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。


简单的ListView使用这里不赘述,这里说下ListView自定义数据和自定义adapter时的较复杂点的使用,

抛砖引玉


先上最终效果图,左面是一个图片,右面有一些文字描述

Android中ListView使用总结_第1张图片


主视图布局配置是这样的,只呈现一个ListView

<?xml version="1.0" encoding="utf-8"?>        

先自定义一个数据类

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"?>                            
接下来就可以自定义adapter了,比较难理解的是getView

package 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),    };    @Override    public int getCount() {        return data.length;    }    @Override    public CustomListCellData getItem(int i) {        return data[i];    }    @Override    public long getItemId(int i) {        return i;    }    //用于构建最终展示在ListView里的每一项    @Override    public 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;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.custom_list_view);        customListView = (ListView) findViewById(R.id.customListView);        customListView.setAdapter(new CustomListViewAdapter(this));    }}


以上。


更多相关文章

  1. Android客户端和服务器交换数据的一种方案
  2. Android中Http传递参数json参数请求数据
  3. Android下通过hook技术实现透明加解密保障数据安全
  4. Android UI组件进阶(1)——带进度条的按钮
  5. Android自定义组件之ListPopWindow
  6. 【Android API指南】App组件(8) - Services(2) - AIDL
  7. Android文档(二)-应用基础(1)应用组件(Application Components)

随机推荐

  1. Android(安卓)libmp3lame详解
  2. Android(安卓)改变当前屏幕背光亮度
  3. android 软件安装到内存还是sd卡?
  4. 1.2android——UI界面之ScrollView实现上
  5. Android多语言切换,字体风格,简体转繁体
  6. Android(安卓)ADB 端口占用问题解决方案
  7. Android(安卓)自定义Dialog、IOS风格;
  8. 如何在Windows上使用GIT下载Android源代
  9. Android使用Broadcast实现无序静态与动态
  10. Android的ViewAnimator及其子类ViewSwitc