基于 BaseAdapter 创建 List View 在使用 SimpleAdapter 时,用户可以在布局中定义按钮,但是当用户单击时,由于单击操作被 ListView 的 Item 所覆盖,导致按钮无法获取到焦点,这时候最方便的方法就是使用灵活的适配器 BaseAdapter 了。
BaseAdapter 是最基础的 Adapter ,也就是说,它可以做所有的事情。说它最实用、最常用,原因就在于它的全能性,它不会像 ArrayAdapter 等封装好的类有那么多局限性,但是这样的话,使用起来自然会更加麻烦。
使用 BaseAdapter 可以新建一个 Java 文件 MyBaseAdapter ,继承自 BaseAdapter ,并且重写它的4个基础方法。
1.添加一个ListView控件:
activity_main.xml:
2.添加自定义的布局文件layout.xml
3.自定义Myadpter类继承自BaseAdapter,然后重写其中的方法。
代码如下所示:
public class MyAdapter extends BaseAdapter {
private List
学会 BaseAdapter 其实只需要掌握4个方法: getCount 、 getltem 、 getItemId 、 getView 。每个方法的具体含义如下所示:
● getCount ﹣要绑定的条目的数目,比如格子的数量。
● getltem ﹣根据一个索引(位置)获得该位置的对象。
● getltemId - 获取条目的 id 。
● get View ﹣ 获取该条目要显示的界面。
可以理解为 adapter 先由 getCount 确定数量,然后循环执行 getView 方法将条目一个一个绘制出来,所以必须重写的是 getCount 和 getView 方法。而 getltem 和 getltemld 是调用某些函数才会触发的方法,如果不需要使用可以暂时不修改。接下来将通过具体的例子来讲解 BaseAdapter 的使用。
4.最后在MainActivity中添加数据以及为ListView添加上文自定义的Adapter
public class MainActivity extends Activity {
private ListView mListView;
private MyAdapter myAdapter;
private List>list=new ArrayList>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
mListView =(ListView) findViewById(R.id.listview);
myAdapter =new MyAdapter(list,this);
mListView.setAdapter(myAdapter);
}
//自定义数据
private void initData() {
Map map =new HashMap();
map.put("img",R.drawable.ic_launcher_background);
map.put("title","Android");
map.put("button","学习");
list.add(map);
map=new HashMap();
map.put("img",R.drawable.ic_launcher_background);
map.put("title","Java");
map.put("button","学习");
list.add(map);
map=new HashMap();
map.put("img",R.drawable.ic_launcher_background);
map.put("title","Html5");
map.put("button","学习");
list.add(map);
map=new HashMap();
map.put("img",R.drawable.ic_launcher_background);
map.put("title","C");
map.put("button","学习");
list.add(map);
map=new HashMap();
map.put("img",R.drawable.ic_launcher_background );
map.put("title","Python");
map.put("button","学习");
list.add(map);
}
}
5.运行结果:



