Android中ListView使用总结
16lz
2021-01-23
在android开发中,ListView是比较常用的组件,以列表形式展示具体内容,并根据数据长度自适应显示 Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。
简单的ListView使用这里不赘述,这里说下ListView自定义数据和自定义adapter时的较复杂点的使用,
作抛砖引玉
先上最终效果图,左面是一个图片,右面有一些文字描述
主视图布局配置是这样的,只呈现一个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)); }}
以上。
更多相关文章
- Android客户端和服务器交换数据的一种方案
- Android中Http传递参数json参数请求数据
- Android下通过hook技术实现透明加解密保障数据安全
- Android UI组件进阶(1)——带进度条的按钮
- Android自定义组件之ListPopWindow
- 【Android API指南】App组件(8) - Services(2) - AIDL
- Android文档(二)-应用基础(1)应用组件(Application Components)