栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

BaseAdapter创建ListView

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

BaseAdapter创建ListView

基于 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>datas;
    private Context mContext;


    public MyAdapter(List>datas,Context mContext){
        this.datas=datas;
        this.mContext=mContext;
    }

    @Override
    public int getCount() {
//返回数据总数
        return datas.size();
    }

    @Override
    public Object getItem(int position) {
//返回在List中指定位置数据的内容
        return datas.get(position);
    }

    @Override
    public long getItemId(int position) {
//返回在List中指定的位置
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        if(convertView==null){
            convertView = LayoutInflater.from(mContext).inflate(
                    R.layout.layout,null);
            holder=new ViewHolder();
            holder.mImageView=(ImageView) convertView.findViewById(R.id.imageView);
            holder.mTextView=(TextView)convertView.findViewById(R.id.textView);
            holder.mButton=(Button) convertView.findViewById(R.id.button);
            holder.mButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(mContext,"哈哈",Toast.LENGTH_SHORT).show();
                }
            });
            convertView.setTag(holder);
        }else {
            holder=(ViewHolder) convertView.getTag();
        }
        holder.mImageView.setImageResource((Integer)datas.get(position).get("img"));
        holder.mTextView.setText(datas.get(position).get("title").toString());
        holder.mButton.setText(datas.get(position).get("button").toString());
        return convertView;
    }
    static class ViewHolder{
        ImageView mImageView;
        TextView mTextView;
        Button mButton;
    }
}

学会 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.运行结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/876881.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号