本文转自:http://blog.csdn.net/tianshuguang/article/details/7344315

话说开发用了各种Adapter之后感觉用的最舒服的还是BaseAdapter,尽管使用起来比其他适配器有些麻烦,但是使用它却能实现很多自己喜欢的列表布局,比如ListView、GridView、Gallery、Spinner等等。它是直接继承自接口类Adapter的,使用BaseAdapter时需要重写很多方法,其中最重要的当属getView,因为这会涉及到ListView优化等问题,其他的方法可以参考链接的文章

BaseAdapter与其他Adapter有些不一样,其他的Adapter可以直接在其构造方法中进行数据的设置,比如

  1. SimpleAdapter adapter = new SimpleAdapter(this, getData(), R.layout.list_item, new String[]{"img","title","info",newint[]{R.id.img, R.id.title, R.id.info}});
SimpleAdapter adapter = new SimpleAdapter(this, getData(), R.layout.list_item, new String[]{"img","title","info",new int[]{R.id.img, R.id.title, R.id.info}});

但是在BaseAdapter中需要实现一个继承自BaseAdapter的类,并且重写里面的很多方法,例如

  1. class MyAdapter extends BaseAdapter
  2. {
  3. private Context context;
  4. public MyAdapter(Context context)
  5. {
  6. this.context = context;
  7. }
  8. @Override
  9. publicint getCount() {
  10. // How many items are in the data set represented by this Adapter.(在此适配器中所代表的数据集中的条目数)
  11. return0;
  12. }
  13. @Override
  14. public Object getItem(int position) {
  15. // Get the data item associated with the specified position in the data set.(获取数据集中与指定索引对应的数据项)
  16. returnnull;
  17. }
  18. @Override
  19. publiclong getItemId(int position) {
  20. // Get the row id associated with the specified position in the list.(取在列表中与指定索引对应的行id)
  21. return0;
  22. }
  23. @Override
  24. public View getView(int position, View convertView, ViewGroup parent) {
  25. // Get a View that displays the data at the specified position in the data set.
  26. returnnull;
  27. }
  28. }
class MyAdapter extends BaseAdapter
{
private Context context;
public MyAdapter(Context context)
{
this.context = context;
}
@Override
public int getCount() {
// How many items are in the data set represented by this Adapter.(在此适配器中所代表的数据集中的条目数)
return 0;
} @Override
public Object getItem(int position) {
// Get the data item associated with the specified position in the data set.(获取数据集中与指定索引对应的数据项)
return null;
} @Override
public long getItemId(int position) {
// Get the row id associated with the specified position in the list.(取在列表中与指定索引对应的行id)
return 0;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
// Get a View that displays the data at the specified position in the data set.
return null;
} }

这里面没什么难度,但是这个getView方法必须好好处理,也是最麻烦的

第一种:没有任何处理,不建议这样写。如果数据量少看将就,但是如果列表项数据量很大的时候,会每次都重新创建View,设置资源,严重影响性能,所以从一开始就不要用这种方式

  1. @Override
  2. public View getView(int position, View convertView, ViewGroup parent) {
  3. View item = mInflater.inflate(R.layout.list_item, null);
  4. ImageView img = (ImageView)item.findViewById(R.id.img)
  5. TextView title = (TextView)item.findViewById(R.id.title);
  6. TextView info = (TextView)item.findViewById(R.id.info);
  7. img.setImageResource(R.drawable.ic_launcher);
  8. title.setText("Hello");
  9. info.setText("world");
  10. return item;
  11. }
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View item = mInflater.inflate(R.layout.list_item, null);
ImageView img = (ImageView)item.findViewById(R.id.img)
TextView title = (TextView)item.findViewById(R.id.title);
TextView info = (TextView)item.findViewById(R.id.info);
img.setImageResource(R.drawable.ic_launcher);
title.setText("Hello");
info.setText("world"); return item;
}

第二种ListView优化:通过缓存convertView,这种利用缓存contentView的方式可以判断如果缓存中不存在View才创建View,如果已经存在可以利用缓存中的View,提升了性能

  1. public View getView(int position, View convertView, ViewGroup parent) {
  2. if(convertView == null)
  3. {
  4. convertView = mInflater.inflate(R.layout.list_item, null);
  5. }
  6. ImageView img = (ImageView)convertView.findViewById(R.id.img)
  7. TextView title = (TextView)convertView.findViewById(R.id.title);
  8. TextView info = (TextView)ConvertView.findViewById(R.id.info);
  9. img.setImageResource(R.drawable.ic_launcher);
  10. title.setText("Hello");
  11. info.setText("world");
  12. return convertView;
  13. }
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null)
{
convertView = mInflater.inflate(R.layout.list_item, null);
} ImageView img = (ImageView)convertView.findViewById(R.id.img)
TextView title = (TextView)convertView.findViewById(R.id.title);
TextView info = (TextView)ConvertView.findViewById(R.id.info);
img.setImageResource(R.drawable.ic_launcher);
title.setText("Hello");
info.setText("world"); return convertView;
}

第三种ListView优化:通过convertView+ViewHolder来实现,ViewHolder就是一个静态类,使用 ViewHolder 的关键好处是缓存了显示数据的视图(View),加快了 UI 的响应速度。

当我们判断 convertView == null  的时候,如果为空,就会根据设计好的List的Item布局(XML),来为convertView赋值,并生成一个viewHolder来绑定converView里面的各个View控件(XML布局里面的那些控件)。再用convertView的setTag将viewHolder设置到Tag中,以便系统第二次绘制ListView时从Tag中取出。(看下面代码中)

如果convertView不为空的时候,就会直接用convertView的getTag(),来获得一个ViewHolder。

  1. //在外面先定义,ViewHolder静态类
  2. staticclass ViewHolder
  3. {
  4. public ImageView img;
  5. public TextView title;
  6. public TextView info;
  7. }
  8. //然后重写getView
  9. @Override
  10. public View getView(int position, View convertView, ViewGroup parent) {
  11. ViewHolder holder;
  12. if(convertView == null)
  13. {
  14. holder = new ViewHolder();
  15. convertView = mInflater.inflate(R.layout.list_item, null);
  16. holder.img = (ImageView)item.findViewById(R.id.img)
  17. holder.title = (TextView)item.findViewById(R.id.title);
  18. holder.info = (TextView)item.findViewById(R.id.info);
  19. convertView.setTag(holder);
  20. }else
  21. {
  22. holder = (ViewHolder)convertView.getTag();
  23. holder.img.setImageResource(R.drawable.ic_launcher);
  24. holder.title.setText("Hello");
  25. holder.info.setText("World");
  26. }
  27. return convertView;
  28. }
//在外面先定义,ViewHolder静态类
static class ViewHolder
{
public ImageView img;
public TextView title;
public TextView info;
}
//然后重写getView
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView == null)
{
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.list_item, null);
holder.img = (ImageView)item.findViewById(R.id.img)
holder.title = (TextView)item.findViewById(R.id.title);
holder.info = (TextView)item.findViewById(R.id.info);
convertView.setTag(holder);
}else
{
holder = (ViewHolder)convertView.getTag();
holder.img.setImageResource(R.drawable.ic_launcher);
holder.title.setText("Hello");
holder.info.setText("World");
} return convertView;
}

到这里,可能会有人问ViewHolder静态类结合缓存convertView与直接使用convertView有什么区别吗,是否重复了

在这里,官方给出了解释

提升Adapter的两种方法

To work efficiently the adapter implemented here uses two techniques: -It reuses the convertView passed to getView() to avoid inflating View when it is not necessary

(译:重用缓存convertView传递给getView()方法来避免填充不必要的视图) -It uses the ViewHolder pattern to avoid calling findViewById() when it is not necessary

(译:使用ViewHolder模式来避免没有必要的调用findViewById():因为太多的findViewById也会影响性能) ViewHolder类的作用 -The ViewHolder pattern consists in storing a data structure in the tag of the view returned by getView().This data structures contains references to the views we want to bind data to, thus avoiding calling to findViewById() every time getView() is invoked

(译:ViewHolder模式通过getView()方法返回的视图的标签(Tag)中存储一个数据结构,这个数据结构包含了指向我们

要绑定数据的视图的引用,从而避免每次调用getView()的时候调用findViewById())

实例一:用BaseAdapter来自定义ListView布局

main.xml

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical">
  6. <ListView
  7. android:id="@+id/lv"
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:fastScrollEnabled="true"
  11. />
  12. </LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > <ListView
android:id="@+id/lv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:fastScrollEnabled="true"
/> </LinearLayout>

list_item.xml

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="horizontal">
  6. <ImageView
  7. android:id="@+id/img"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. />
  11. <LinearLayout
  12. android:layout_width="fill_parent"
  13. android:layout_height="wrap_content"
  14. android:orientation="vertical"
  15. >
  16. <TextView
  17. android:id="@+id/tv"
  18. android:layout_width="wrap_content"
  19. android:layout_height="wrap_content"
  20. android:textSize="20sp"
  21. />
  22. <TextView
  23. android:id="@+id/info"
  24. android:layout_width="wrap_content"
  25. android:layout_height="wrap_content"
  26. android:textSize="14sp"
  27. />
  28. </LinearLayout>
  29. </LinearLayout>
<?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="match_parent"
android:orientation="horizontal" > <ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
/>
<TextView
android:id="@+id/info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
/>
</LinearLayout> </LinearLayout>

Activity

  1. package com.loulijun.demo17;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6. import android.app.Activity;
  7. import android.content.Context;
  8. import android.os.Bundle;
  9. import android.view.LayoutInflater;
  10. import android.view.View;
  11. import android.view.ViewGroup;
  12. import android.widget.BaseAdapter;
  13. import android.widget.ImageView;
  14. import android.widget.ListView;
  15. import android.widget.TextView;
  16. publicclass Demo17Activity extends Activity {
  17. private ListView lv;
  18. private List<Map<String, Object>> data;
  19. @Override
  20. publicvoid onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.main);
  23. lv = (ListView)findViewById(R.id.lv);
  24. //获取将要绑定的数据设置到data中
  25. data = getData();
  26. MyAdapter adapter = new MyAdapter(this);
  27. lv.setAdapter(adapter);
  28. }
  29. private List<Map<String, Object>> getData()
  30. {
  31. List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
  32. Map<String, Object> map;
  33. for(int i=0;i<10;i++)
  34. {
  35. map = new HashMap<String, Object>();
  36. map.put("img", R.drawable.ic_launcher);
  37. map.put("title", "跆拳道");
  38. map.put("info", "快乐源于生活...");
  39. list.add(map);
  40. }
  41. return list;
  42. }
  43. //ViewHolder静态类
  44. staticclass ViewHolder
  45. {
  46. public ImageView img;
  47. public TextView title;
  48. public TextView info;
  49. }
  50. publicclass MyAdapter extends BaseAdapter
  51. {
  52. private LayoutInflater mInflater = null;
  53. private MyAdapter(Context context)
  54. {
  55. //根据context上下文加载布局,这里的是Demo17Activity本身,即this
  56. this.mInflater = LayoutInflater.from(context);
  57. }
  58. @Override
  59. publicint getCount() {
  60. //How many items are in the data set represented by this Adapter.
  61. //在此适配器中所代表的数据集中的条目数
  62. return data.size();
  63. }
  64. @Override
  65. public Object getItem(int position) {
  66. // Get the data item associated with the specified position in the data set.
  67. //获取数据集中与指定索引对应的数据项
  68. return position;
  69. }
  70. @Override
  71. publiclong getItemId(int position) {
  72. //Get the row id associated with the specified position in the list.
  73. //获取在列表中与指定索引对应的行id
  74. return position;
  75. }
  76. //Get a View that displays the data at the specified position in the data set.
  77. //获取一个在数据集中指定索引的视图来显示数据
  78. @Override
  79. public View getView(int position, View convertView, ViewGroup parent) {
  80. ViewHolder holder = null;
  81. //如果缓存convertView为空,则需要创建View
  82. if(convertView == null)
  83. {
  84. holder = new ViewHolder();
  85. //根据自定义的Item布局加载布局
  86. convertView = mInflater.inflate(R.layout.list_item, null);
  87. holder.img = (ImageView)convertView.findViewById(R.id.img);
  88. holder.title = (TextView)convertView.findViewById(R.id.tv);
  89. holder.info = (TextView)convertView.findViewById(R.id.info);
  90. //将设置好的布局保存到缓存中,并将其设置在Tag里,以便后面方便取出Tag
  91. convertView.setTag(holder);
  92. }else
  93. {
  94. holder = (ViewHolder)convertView.getTag();
  95. }
  96. holder.img.setBackgroundResource((Integer)data.get(position).get("img"));
  97. holder.title.setText((String)data.get(position).get("title"));
  98. holder.info.setText((String)data.get(position).get("info"));
  99. return convertView;
  100. }
  101. }
  102. }
package com.loulijun.demo17;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView; public class Demo17Activity extends Activity {
private ListView lv;
private List<Map<String, Object>> data;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lv = (ListView)findViewById(R.id.lv);
//获取将要绑定的数据设置到data中
data = getData();
MyAdapter adapter = new MyAdapter(this);
lv.setAdapter(adapter);
} private List<Map<String, Object>> getData()
{
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map;
for(int i=0;i<10;i++)
{
map = new HashMap<String, Object>();
map.put("img", R.drawable.ic_launcher);
map.put("title", "跆拳道");
map.put("info", "快乐源于生活...");
list.add(map);
}
return list;
} //ViewHolder静态类
static class ViewHolder
{
public ImageView img;
public TextView title;
public TextView info;
} public class MyAdapter extends BaseAdapter
{
private LayoutInflater mInflater = null;
private MyAdapter(Context context)
{
//根据context上下文加载布局,这里的是Demo17Activity本身,即this
this.mInflater = LayoutInflater.from(context);
} @Override
public int getCount() {
//How many items are in the data set represented by this Adapter.
//在此适配器中所代表的数据集中的条目数
return data.size();
} @Override
public Object getItem(int position) {
// Get the data item associated with the specified position in the data set.
//获取数据集中与指定索引对应的数据项
return position;
} @Override
public long getItemId(int position) {
//Get the row id associated with the specified position in the list.
//获取在列表中与指定索引对应的行id
return position;
} //Get a View that displays the data at the specified position in the data set.
//获取一个在数据集中指定索引的视图来显示数据
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
//如果缓存convertView为空,则需要创建View
if(convertView == null)
{
holder = new ViewHolder();
//根据自定义的Item布局加载布局
convertView = mInflater.inflate(R.layout.list_item, null);
holder.img = (ImageView)convertView.findViewById(R.id.img);
holder.title = (TextView)convertView.findViewById(R.id.tv);
holder.info = (TextView)convertView.findViewById(R.id.info);
//将设置好的布局保存到缓存中,并将其设置在Tag里,以便后面方便取出Tag
convertView.setTag(holder);
}else
{
holder = (ViewHolder)convertView.getTag();
}
holder.img.setBackgroundResource((Integer)data.get(position).get("img"));
holder.title.setText((String)data.get(position).get("title"));
holder.info.setText((String)data.get(position).get("info")); return convertView;
} }
}

运行结果如下:


实例二:Gallery上应用BaseAdapter

main.xml

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical">
  6. <ImageView
  7. android:id="@+id/img"
  8. android:layout_width="480px"
  9. android:layout_height="480px"
  10. android:layout_gravity="center"
  11. />
  12. <Gallery
  13. android:id="@+id/gallery"
  14. android:layout_width="fill_parent"
  15. android:layout_height="wrap_content"
  16. android:spacing="3dp"
  17. android:layout_gravity="bottom"
  18. />
  19. </LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > <ImageView
android:id="@+id/img"
android:layout_width="480px"
android:layout_height="480px"
android:layout_gravity="center"
/>
<Gallery
android:id="@+id/gallery"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:spacing="3dp"
android:layout_gravity="bottom"
/> </LinearLayout>

Activity:这部分里的getView没有优化,调试了很久还没调通,暂时还是用的最基本的方法。会专门找个时间把Gallery内存泄露的部分写一下,因为图片资源很多的时候会引起out of memory的错误

  1. package com.loulijun.demo16;
  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. import android.widget.AdapterView;
  8. import android.widget.BaseAdapter;
  9. import android.widget.Gallery;
  10. import android.widget.ImageView;
  11. publicclass Demo16Activity extends Activity {
  12. private Gallery mGallery;
  13. private ImageView mImg;
  14. //图片数组
  15. privateint[] pics = {
  16. R.drawable.pic1,
  17. R.drawable.pic2,
  18. R.drawable.pic3,
  19. R.drawable.pic4,
  20. R.drawable.pic5,
  21. R.drawable.pic6
  22. };
  23. @Override
  24. publicvoid onCreate(Bundle savedInstanceState) {
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.main);
  27. mImg = (ImageView)findViewById(R.id.img);
  28. mGallery = (Gallery)findViewById(R.id.gallery);
  29. MyAdapter adapter = new MyAdapter(this);
  30. mGallery.setAdapter(adapter);
  31. mGallery.setOnItemClickListener(new Gallery.OnItemClickListener()
  32. {
  33. @Override
  34. publicvoid onItemClick(AdapterView<?> adapter, View view, int position,
  35. long arg3) {
  36. mImg.setImageResource(pics[position]);
  37. }
  38. });
  39. }
  40. //内部类
  41. class MyAdapter extends BaseAdapter
  42. {
  43. //用来接收传递过来的Context上下文对象
  44. private Context context;
  45. //构造函数
  46. public MyAdapter(Context context)
  47. {
  48. this.context = context;
  49. }
  50. @Override
  51. publicint getCount() {
  52. //返回图片数组大小
  53. return pics.length;
  54. }
  55. @Override
  56. public Object getItem(int position) {
  57. //根据选中项返回索引位置
  58. return position;
  59. }
  60. @Override
  61. publiclong getItemId(int position) {
  62. //根据选中项id返回索引位置
  63. return position;
  64. }
  65. //未优化的getView,这部分可以使用recycle()释放内存、或者BitmapFacotry.Options缩小,或者软引用,或者控制图片资源大小等等很多方法,找时间专门写
  66. @Override
  67. public View getView(int position, View convertView, ViewGroup parent) {
  68. ImageView img = new ImageView(context);
  69. img.setAdjustViewBounds(true);
  70. img.setImageResource(pics[position]);
  71. img.setScaleType(ImageView.ScaleType.FIT_XY);
  72. img.setLayoutParams(new Gallery.LayoutParams(120,120));
  73. return img;
  74. }
  75. }
  76. }
package com.loulijun.demo16;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView; public class Demo16Activity extends Activity {
private Gallery mGallery;
private ImageView mImg;
//图片数组
private int[] pics = {
R.drawable.pic1,
R.drawable.pic2,
R.drawable.pic3,
R.drawable.pic4,
R.drawable.pic5,
R.drawable.pic6
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mImg = (ImageView)findViewById(R.id.img);
mGallery = (Gallery)findViewById(R.id.gallery);
MyAdapter adapter = new MyAdapter(this);
mGallery.setAdapter(adapter);
mGallery.setOnItemClickListener(new Gallery.OnItemClickListener()
{ @Override
public void onItemClick(AdapterView<?> adapter, View view, int position,
long arg3) {
mImg.setImageResource(pics[position]);
} });
} //内部类
class MyAdapter extends BaseAdapter
{
//用来接收传递过来的Context上下文对象
private Context context; //构造函数
public MyAdapter(Context context)
{
this.context = context;
}
@Override
public int getCount() {
//返回图片数组大小
return pics.length;
} @Override
public Object getItem(int position) {
//根据选中项返回索引位置
return position;
} @Override
public long getItemId(int position) {
//根据选中项id返回索引位置
return position;
}
//未优化的getView,这部分可以使用recycle()释放内存、或者BitmapFacotry.Options缩小,或者软引用,或者控制图片资源大小等等很多方法,找时间专门写
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView img = new ImageView(context);
img.setAdjustViewBounds(true);
img.setImageResource(pics[position]);
img.setScaleType(ImageView.ScaleType.FIT_XY);
img.setLayoutParams(new Gallery.LayoutParams(120,120)); return img;
}
}
}

运行效果:原理都是一样,只不过是布局加载的时候会有区别,不过就这个小区别也让人够恼火的了

文章精选:

http://www.cnblogs.com/over140/archive/2010/12/03/1895128.html

[转]Android杂谈--ListView之BaseAdapter的使用的更多相关文章

  1. Android杂谈--ListView之BaseAdapter的使用

    话说开发用了各种Adapter之后感觉用的最舒服的还是BaseAdapter,尽管使用起来比其他适配器有些麻烦,但是使用它却能实现很多自己喜欢的列表布局,比如ListView.GridView.Gal ...

  2. Android 杂谈---ListView 之BaseAdapter

    前言 几种适配器里面相对来说比较简单的一种适配器,在使用时需要实现几个方法,并且也需要对convertView进行优化 此篇文章以使用listView与BaseAdapter来实现表格样式的布局举例( ...

  3. 43.Android之ListView中BaseAdapter学习

    实际开发中个人觉得用的比较多是BaseAdapter,尽管使用起来比其他适配器有些麻烦,但是使用它却能实现很多自己喜欢的列表布局,比如ListView.GridView.Gallery.Spinner ...

  4. android 中listview之BaseAdapter的使用

    Listview控件不像其他安卓控件那种直接拖拽到界面上就能用,而是采用类似J2EE中的MVC模型的方式使用,需要通过适配器将某种样式的数据或控件添加到其上而使用. MVC模型实现原理是 数据模型M( ...

  5. Android中ListView通过BaseAdapter实现数据的绑定

    1. public class ListFiles extends Activity { ListView Listview=null; protected void onCreate(Bundle ...

  6. Android关于listView的BaseAdapter以及getView的三级优化

    1.4个重写方法的含义 自定义Adapter继承自BaseAdapter(通用适配器)   getCount(); getItem(); getItemId(); getViewTypaCount() ...

  7. Android使用listView,BaseAdapter实现列表页

    参考: 1.讲解很详细: blog.csdn.net/psuaije/article/details/7447391 总结: 代码:

  8. 转--Android实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。

    其实实现ListView过滤功能最方便的便是使用ArrayAdapter,里面自带的getFilter()方法能很方便的实现此功能,但是在实际的开发中,一般都是继承于BaseAdapter.还有一种是 ...

  9. Android 中万能的 BaseAdapter(Spinner,ListView,GridView) 的使用!

    大家好!今天给大家讲解一下BaseAdapter(基础适配器)的用法,适配器的作用主要是用来给诸如(Spinner,ListView,GridView)来填充数据的.而(Spinner,ListVie ...

随机推荐

  1. 充当别的mcu的外部存储器(51类)

    // 锁存地址 - STC12C5A60S2 reg [15:0]rAddr_51; //存放51单片机传过来的地址 读51地址寄存器 always @ (posedge MCLKout or neg ...

  2. Apache Maven Cookbook(八)学习笔记-Handling Typical Build Requirements

    Including and excluding additional resources Using the Maven Help Plugin: mvn help:effective-pom mvn ...

  3. HDU 1130

    题目大意 给定节点数 , 求通过这么多个节点能得到的二叉树的组成方式 用卡特兰数解决 f[n] = (4*n-2) * f[n-1] / (n+1); 递归不断解决 /** * @(#)Main.ja ...

  4. [K/3Cloud] K/3 Cloud1.0怎样和2.0共存在一台服务器上

    第一步:安装Cloud1.0,创建管理中心,创建业务数据中心,备份管理数据库和业务数据库,并且备份安装目录: 第二步:卸载Cloud1.0,清理安装目录,安装Cloud2.0,创建管理中心,创建业务数 ...

  5. 分块试水--CODEVS4927 线段树练习5

    模板 #include<stdio.h> #include<algorithm> #include<string.h> #include<stdlib.h&g ...

  6. 5-46 新浪微博热门话题 (30分)——unfinished HASH

    5-46 新浪微博热门话题   (30分) 新浪微博可以在发言中嵌入“话题”,即将发言中的话题文字写在一对“#”之间,就可以生成话题链接,点击链接可以看到有多少人在跟自己讨论相同或者相似的话题.新浪微 ...

  7. HDU——3579 Hello Kiki

    Hello Kiki Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. [bzoj 1005][HNOI 2008]明明的烦恼(prufer数列+排列组合)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1005 分析: 首先prufer数列:http://baike.baidu.com/view/1 ...

  9. js有块级作用域么?

    //js私有作用域,js没有块级作用域 function Box(){ for(var i=0;i<5;i++){} console.log(i);//5,如果js有块级作用域,那么i在for循 ...

  10. 《从零開始学Swift》学习笔记(Day 55)——使用try?和try!差别

    原创文章.欢迎转载.转载请注明:关东升的博客   在使用try进行错误处理的时候,常常会看到try后面跟有问号(? )或感叹号(!),他们有什么差别呢? 1.使用try? try?会将错误转换为可选值 ...