[b][color=red]AdapterView[/color][/b]中经常用到适配器Adapter,而anroid提供的Adapter只是几种框架,如果我们有需求,还是要自己根据需求而自定义Adapter的。

android提供的[color=blue][b]三种Adapter[/b][/color]主要有[color=red]ArrayAdapter SimpleAdapter SimpleCursorAdapter[/color]

[b]ArrayAdapter是简单的数组适配器[/b]

[color=blue][b]SimpleAdapter是可以自定义子View布局的,可以有图片[/b][/color]

[size=medium][b]SimpleCursorAdapter主要用于数据库[/b][/size],前两个的数据来源一般都是String[]或者List,后一个的数据来源一般是数据库查询得到的Cursor

自定义用的最多的还是[color=red]BaseAdapter[/color]

继承[color=red][b]BaseAdapter[/b][/color],具体要复写的方法有4个:

public int getCount() 
public Object getItem(int position)
public long getItemId(int position)
public View getView(int position, View convertView, ViewGroup parent)


还有一个更重要的是其构造方法
[color=red]MyAdapter(Context context, List> list)[/color]参数不是固定的,可以根据要用到的数据自己定义。
[color=blue][b]第一个参数是要显示的上下文环境,[/b][/color]
[b][color=red]第二个参数是用来记录各个条目的数据。[/color][/b]

[color=red][b]第四个方法主要是返回这个条目的整个信息,它是一个单独的布局文件,当然根据android结构也是一个View类的继承类了[/b][/color],这里还有一个知识点是LayoutInflater类,它的inflate()方法可以根据布局文件获得其View返回。
[color=red]最重要的思想是你要从这些条目中获得其子View(关系为ListView中有很多条目,每个条目中又有很多组件,我这里是ListView中多个下载任务是不同的条目,每个下载任务中的名字,进度又是其子View的组件),再得到其子组件之后,就可以根据构造方法中List> list参数传递的值进行对应的赋值或者设置资源了[/color],具体代码如下:


import java.util.List;
import java.util.Map;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;

public class MyAdapter extends BaseAdapter
{
private Context context;

private LayoutInflater layoutInflater;

private List> list;

//构造方法,参数list传递的就是这一组数据的信息
public MyAdapter(Context context, List> list)
{
this.context = context;

layoutInflater = LayoutInflater.from(context);

this.list = list;
}

//得到总的数量
public int getCount()
{

return this.list!=null? this.list.size(): 0 ;
}

//根据ListView位置返回View
public Object getItem(int position)
{

return this.list.get(position);
}

//根据ListView位置得到List中的ID
public long getItemId(int position)
{

return position;
}

//根据位置得到View对象
public View getView(int position, View convertView, ViewGroup parent)
{
if(convertView == null)
{
convertView = layoutInflater.inflate(R.layout.item, null);
}

//得到条目中的子组件
TextView tv1 = (TextView)convertView.findViewById(R.id.nameTextView);
ProgressBar pb = (ProgressBar)convertView.findViewById(R.id.sizeProgressBar);
TextView tv2 = (TextView)convertView.findViewById(R.id.sizeTextView);

//从list对象中为子组件赋值
tv1.setText(list.get(position).get("name").toString());
pb.setProgress(Integer.parseInt(list.get(position).get("size").toString()));
tv2.setText(list.get(position).get("size").toString());

return convertView;
}
}

更多相关文章

  1. Android02--debug.keystore的注册信息
  2. 2011.09.13(3)——— android 添加快捷方式并且图标上添加数字
  3. Android得到视频缩略图
  4. Android拍照得到的照片旋转了90度
  5. Android中全屏无标题设置
  6. Android(安卓)safe mode
  7. android得到version name
  8. Android获取apk的版本及包名等信息
  9. android View根据自己获取焦点的情况执行语句

随机推荐

  1. 面试官问我,使用Dubbo有没有遇到一些坑?我
  2. 你了解java中的几种编码方式?解决乱码问题
  3. Android的MediaPlayer
  4. 让各位久等了,你要的大杀器快要来了
  5. java日志框架体系梳理,简单直白
  6. Spring IOC知识点一网打尽!
  7. 为什么推荐使用try-with-resources代替tr
  8. Zipper_Haskell笔记13
  9. 面试官问我,Redis分布式锁如何续期?懵了。
  10. java小白到架构师技术图谱(整理全网,持续更