博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 适配器
阅读量:7152 次
发布时间:2019-06-29

本文共 3566 字,大约阅读时间需要 11 分钟。

 Adapter是连接后端数据和前端显示的桥梁,是数据和UI(View)之间的纽带。
    在常见的View(ListView,GridView)等地方都需要用到Adapter。数据、Adapter和View之间的关系如下:
    常见的适配器有以下几种:
  • BaseAdapter:是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性;
  • SimpleAdapter:有最好的扩充性,可以自定义出各种效果。
  • ArrayAdapter:支持泛型操作,最为简单,只能展示一行字。
  • SimpleCursorAdapter:可以适用于简单的纯文字型ListView,也可以认为是SimpleAdapter对数据库的简单结合,可以方便地把数据库的内容以列表的形式展示出来。
    从源码上分析,其它类都是继承了BaseAdapter类,继承该类可以实现的功能最丰富,继承它需要实现以下四个方法:
  • getCount():得到数据的行数,也可以控制item的数量
  • getItem(int position):根据positon得到某一行的记录
  • getItemId(int postion):得到某一条记录的ID
  • getView(int position, View cnverView, ViewGroup parent):最重要的一个方法,重点介绍。功能是定义适配器以什么样的方式显示我们填充的数据,参数介绍如下,
    position表示将显示的是第几行,converView是从布局文件(List中item的布局)中inflate来的,parent表示此视图最终会被附加到的父级视图。经典示例如下:
public View getView(int position, View convertView, ViewGroup parent) {            if (convertView == null) {                LayoutInflater inflater = (LayoutInflater)MyListView.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);                View itemView = inflater.inflate(R.layout.item, null);                TextView title = (TextView)itemView.findViewById(R.id.itemTitle);                title.setText(itemTitles[position]);                return itemView;            } else {                TextView title = (TextView)convertView.findViewById(R.id.itemTitle);                title.setText(itemTitles[position]);                return convertView;            }        }

通过视图缓存机制优化,适配器的完整代码如下:

public class ViewHolderAdapter extends BaseAdapter {    private List
mData; private LayoutInflater mInflater; public ViewHolderAdapter(Context context, List
data){ this.mData=data; mInflater=LayoutInflater.from(context); } @Override public int getCount() {// TODO Auto-generated method stub,控制只显示3个item return mData.size() > 3 : 3 : mData.size; } @Override public Object getItem(int position) {// TODO Auto-generated method stub return mData.get(position); } @Override public long getItemId(int position) {// TODO Auto-generated method stub return position; } public final class ViewHolder{ public ImageView img; public TextView title; } @Override public View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stub ViewHolder holder=null; if(convertView==null){ holder=new ViewHolder(); convertView=mInflater.inflate(R.layout.viewholder_item,null);//填充自定义item holder.img=(ImageView)convertView.findViewById(R.id.imageView); holder.title=(TextView)convertView.findViewById(R.id.textView); convertView.setTag(holder); }else{//通过Tag找到缓存的布局 holder=(ViewHolder)convertView.getTag(); } holder.img.setBackgroundResource(R.drawable.one); holder.title.setText(mData.get(position)); return convertView; }}

最后在MainActivity中显示

public class MainActivity extends Activity {    private List
mData; private ViewHolderAdapter adapter; private ListView listview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listview=(ListView) findViewById(R.id.listview); mData=new ArrayList
(); for(int i=0;i<120;i++){ mData.add(""+i); } adapter=new ViewHolderAdapter(this,mData); listview.setAdapter(adapter); }}

 

 

转载于:https://www.cnblogs.com/longzhongren/p/6084967.html

你可能感兴趣的文章
linux每日命令(36):wc命令
查看>>
数论基础(附加例题)
查看>>
web应用,http协议简介,web框架
查看>>
递归找零问题
查看>>
纯手工编写的PE可执行程序
查看>>
实验四
查看>>
go标准库的学习-sync互斥
查看>>
FZU.Software Engineering1816 · First Homework -Preparation
查看>>
python学习day-10 模块补充
查看>>
mysql连接慢,修改配置文件
查看>>
数轴染色
查看>>
LNMP环境源码搭建
查看>>
配置webpack.config.js中的文件
查看>>
linux下安装jdk
查看>>
统计学习方法 李航---第5章 决策树
查看>>
java中绘图-----那个鼠标等的监听我还是不太会,,好苦恼啊。不知道这些监听事件是怎么区分的...
查看>>
java从键盘输入若干数,求其最大值,最小值,平均值。等等
查看>>
volatile
查看>>
Ali流量控制中间件Sentinel
查看>>
微信小程序里多出来的奇怪宽度
查看>>