0

0

Android 自定义ListView

高洛峰

高洛峰

发布时间:2016-12-13 17:01:03

|

1377人浏览过

|

来源于php中文网

原创

本文讲实现一个自定义列表的android程序,程序将实现一个使用自定义的适配器(adapter)绑定 
数据,通过contextview.settag绑定数据有按钮的listview。 
系统显示列表(listview)时,首先会实例化一个适配器,本文将实例化一个自定义的适配器。实现 
自定义适配器,必须手动映射数据,这时就需要重写getview()方法,系统在绘制列表的每一行的时候 
将调用此方法。 
listview在开始绘制的时候,系统自动调用getcount()函数,根据函数返回值得到listview的长度, 
然后根据这个长度,调用getview()逐一画出每一行。 
具体使用方法可以参考下面代码,只需记住android自定义listview三步骤: 
第一步:准备主布局文件、组件布局文件等 
第二步:获取并整理数据 
第三部:绑定数据,这里我们是通过自己编写adapter类来完成的 
1.首先新建一个list.xml 

Java代码 

  
  
      
          
          
        

2、新建一个适配器类MyAdspter.java 

Java代码 

public class MyAdspter extends BaseAdapter {  
  
    private List> data;  
    private LayoutInflater layoutInflater;  
    private Context context;  
    public MyAdspter(Context context,List> data){  
        this.context=context;  
        this.data=data;  
        this.layoutInflater=LayoutInflater.from(context);  
    }  
    /** 
     * 组件集合,对应list.xml中的控件 
     * @author Administrator 
     */  
    public final class Zujian{  
        public ImageView image;  
        public TextView title;  
        public Button view;  
        public TextView info;  
    }  
    @Override  
    public int getCount() {  
        return data.size();  
    }  
    /** 
     * 获得某一位置的数据 
     */  
    @Override  
    public Object getItem(int position) {  
        return data.get(position);  
    }  
    /** 
     * 获得唯一标识 
     */  
    @Override  
    public long getItemId(int position) {  
        return position;  
    }  
  
    @Override  
    public View getView(int position, View convertView, ViewGroup parent) {  
        Zujian zujian=null;  
        if(convertView==null){  
            zujian=new Zujian();  
            //获得组件,实例化组件  
            convertView=layoutInflater.inflate(R.layout.list, null);  
            zujian.image=(ImageView)convertView.findViewById(R.id.image);  
            zujian.title=(TextView)convertView.findViewById(R.id.title);  
            zujian.view=(Button)convertView.findViewById(R.id.view);  
            zujian.info=(TextView)convertView.findViewById(R.id.info);  
            convertView.setTag(zujian);  
        }else{  
            zujian=(Zujian)convertView.getTag();  
        }  
        //绑定数据  
        zujian.image.setBackgroundResource((Integer)data.get(position).get("image"));  
        zujian.title.setText((String)data.get(position).get("title"));  
        zujian.info.setText((String)data.get(position).get("info"));  
        return convertView;  
    }  
  
}

关于上面LayoutInflater的使用:在实际开发种LayoutInflater这个类还是非常有用的。它的作用类似 
于 findViewById(),不同点是LayoutInflater是用来找layout下xml布局文件,并且会实例化!。 
getView()的三个参数:position表示将显示的是第几行,covertView是从布局文件中inflate来的布 
局。我们用LayoutInflater的方法将定义好的list.xml文件提取成View实例用来显示。然后将xml文件 
中的各个组件实例化,这样便可以将数据对应到各个组件上了。但是按钮为了响应点击事件,需要为 
它添加点击监听器,这样就能捕获点击事件。 
3、activity_main.xml中添加ListView控件 

Huemint
Huemint

推荐!用AI自定义和谐配色

下载

Java代码 

  
      

4、在activity中调用ListView 

Java代码 

public class MainActivity extends Activity {  
  
    private ListView listView=null;   
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        listView=(ListView)findViewById(R.id.list);  
        List> list=getData();  
        listView.setAdapter(new MyAdspter(this, list));  
    }  
    @Override  
    public boolean onCreateOptionsMenu(Menu menu) {  
        getMenuInflater().inflate(R.menu.main, menu);  
        return true;  
    }  
  
    public List> getData(){  
        List> list=new ArrayList>();  
        for (int i = 0; i < 10; i++) {  
            Map map=new HashMap();  
            map.put("image", R.drawable.ic_launcher);  
            map.put("title", "这是一个标题"+i);  
            map.put("info", "这是一个详细信息"+i);  
            list.add(map);  
        }  
        return list;  
    }  
}

相关专题

更多
c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

42

2026.01.23

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

46

2026.01.23

yy漫画官方登录入口地址合集
yy漫画官方登录入口地址合集

本专题整合了yy漫画入口相关合集,阅读专题下面的文章了解更多详细内容。

202

2026.01.23

漫蛙最新入口地址汇总2026
漫蛙最新入口地址汇总2026

本专题整合了漫蛙最新入口地址大全,阅读专题下面的文章了解更多详细内容。

341

2026.01.23

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

16

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

100

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

73

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

75

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

67

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号