自定义Adapter的listview(很重要)

首先介绍下MVC:M就是modle,V是view,C是control

把数据通过适配器适配一定格式后,给listview输出

listview相当于一个空的架子,把格式化的数据放出来

LayoutInflater跟findById很像,只是findById是找的控件,LayoutInflater找的是xml文件

自定义流程:

1) mainactivity运行本身的布局文件和listview.setadapter启动adapter,adapter要映射 数据 到 布局

2) 要找到布局要用LayoutInflater,要找数据需要从Student类中取写到mData里(图片也是属性之一)

3) LayoutInflater在适配器中不能写所以在mainactivity中写好了再用构造器传过去,同时还传了mData,而mData中的数据是Student类型的List,需要初始化就创建了一个方法写这个叫mData的List,写完一起传给了自定义的adapter,然后这个adapter把得来的数据按照布局文件个格式一顿封装传给listview摆上

listview有3个给出的适配器ArrayAdapter、SimpleAdapter和SimpleCursorAdapter,但是都是应经固定好的,不能更精确

解析自定义adapter的listview

1)数据集,即要映射的字符串、图片信息之类。

2)适配器,实现把要映射的字符串、图片信息映射成视图(如Textview、Image等组件)《其实就是布局文件,也就是自定义的适配格式》,再添加到ListView中。

写一个Student类做数据源

/** * Created by litoo on 2015/8/24. */public class Student {private String name;private String sex;private String hobby;private int img;public Student(String name,String sex, String hobby,int img){        this.name=name;        this.sex=sex;        this.img=img;        this.hobby=hobby;    }public void setImg(int img) {        this.img = img;    }

public int getImg() {        return img;    }public void setHobby(String hobby) {        this.hobby = hobby;    }

public String getHobby() {        return hobby;    }public void setName(String name) {                this.name = name;    }public void setSex(String sex) {            this.sex = sex;    }public String getSex() {            return sex;    }public String getName() {            return name;    }}

mainactivity

public class MainActivity extends Activity{private ListView mListView;private List<Student> mData;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);        setContentView(R.layout.imgview_activity);mListView= (ListView) findViewById(R.id.list_itemmm);//mainactivity运行关联的布局文件,通过id找到listview        LayoutInflater inflater=getLayoutInflater();//传入Layoutinflater,在适配器中不能写,所以在这写好用构造器传过去gettData();                          //初始化mData,写了一个方法,把人装进ListStudentadapter studentadapter=new Studentadapter(inflater,mData);//调用构造器mListView.setAdapter(studentadapter);   }private void gettData() {        mData=new ArrayList<>();        mData.add(new Student("张三","男","爱好篮球",R.mipmap.luckdog));//用student的构造器把4                                                                                                                                    个student装进mData        mData.add(new Student("李四","男","爱好足球",R.mipmap.luckdog));        mData.add(new Student("王五","男","爱好游戏",R.mipmap.luckdog));        mData.add(new Student("赵六","男","爱好睡觉",R.mipmap.luckdog));    }}自定义adapter继承自BaseAdapter(一个抽象类)
/** * Created by litoo on 2015/8/24. */public class Studentadapter extends BaseAdapter{private List<Student> mData;private LayoutInflater minflater;public Studentadapter(LayoutInflater inflater,List<Student> data){        minflater=inflater;        mData=data;    }@Overridepublic int getCount() {//适配器是用来往listview传数据的,所以数据有多少条就返回多少return mData.size();    }@Overridepublic Object getItem(int position) {//用于返回这一行的数据,一般情况下只需要返回索引就能找到return position;    }@Overridepublic long getItemId(int position) {return position;//要不要这行数据来个id,返回索引}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {        View view=minflater.inflate(R.layout.simple_adpter,null);//固定写法Student student=mData.get(position);                  //把student从List里面挨个读出来,按照布局分好返回这个视图给listview显示        ImageView imageview= (ImageView) view.findViewById(R.id.image_photo);        TextView textview_name= (TextView) view.findViewById(R.id.text_name);        TextView textview_sex= (TextView) view.findViewById(R.id.text_sex);        TextView textview_hobby= (TextView) view.findViewById(R.id.text_hobby);        textview_name.setText(student.getName());        textview_sex.setText(student.getSex());        textview_hobby.setText(student.getHobby());        imageview.setImageResource(student.getImg());return view;    }}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-03 22:29:36

自定义Adapter的listview(很重要)的相关文章

Android 自定义Adapter 但listview 只显示第一条数据

楼主让这个问题郁闷了一晚上.....在logcat里明明显示adapter的getview方法里的list大于一条数据 ,但posotion却一直是0.....运行后也只显示list[0]里面的数据....最后的最后原来错误出在布局文件上 我以前的是这样的; <ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content" > <!-- listv

【转】Android自定义Adapter的ListView的思路及代码

原文网址:http://www.jb51.net/article/37236.htm Android自定义Adapter的ListView的思路及代码,需要的朋友可以参考一下 在开发中,我们经常使用到ListView这个控件.Android的API也提供了许多创建ListView适配器的快捷方式.例如ArrayAdapter.SimpleAdapter和SimpleCursorAdapter等.但你是否发现,如果采用这些系统自带的适配器,对于事件的响应只能局限在一个行单位.假设一行里面有一个按钮

【转】Android之自定义Adapter的ListView

http://www.cnblogs.com/topcoderliu/archive/2011/05/07/2039862.html 在开发中,我们经常使用到ListView这个控件.Android的API也提供了许多创建ListView适配器的快捷方式.例如ArrayAdapter.SimpleAdapter和SimpleCursorAdapter等.但你是否发现,如果采用这些系统自带的适配器,对于事件的响应只能局限在一个行单位.假设一行里面有一个按钮和一个图片控件,它们之间的响应操作是不一样

Android学习----自定义Adapter实现ListView

前言: 对于ListView而言,自定义的Adapter对于显示复杂的界面有很大的灵活性 .使用自定义的Adapter需要继承BaseAdapter,然后重写getCount(),getView(),getItem,getItemId()4个方法.adapter在绘制listview时是先根据getCount()获得底层数据的个数来判断绘制item的个数,然后通过getView绘制单个item. ListView实现的效果如下: 详细步骤: 1.新建Activity,在对应的布局文件中放置lis

关于自定义Adapter实现ListView的使用

以下为使用BaseAdapter作扩展,自定义Adapter来使用ListView控件: 需要注意以下的几点: 1.自定义Adapter时,需要特别注意Adapter类中getView()方法覆盖,注意加载布局文件和加载控件的区别: 2.自定义好Adapter后,在Activity中实现ListView的过程: (1)生成Adapter对象(注意传入一个list表),并将Adapter对象作为ListView的适配器 ListViewAdapter adapter = new ListViewA

自定义Adapter显示listView

//xml文件,设置好listView,listView相当于一个view容器,可以向listView里面塞view形成item; <?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns

Adapter(自定义适配器)Listview

Android系统中自带的SimpleAdapter,有很多局限,所以很多用自定义的 //系统的SimpleAdapter a.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical&q

自定义ListView实现中间项动态变大的效果(不是自定义Adapter)

为什么强调不是自定义Adapter,因为我这个自定义控件是来源与公司新做的项目,刚开始在百度上找了一圈,都说是自定义ListView ,点进去却是自定义Adaper,有的人就会说你是不是太较真了,自定义Adapter就基本可以实现各种效果了,何必要自定义Listview,今天我做的这个还确实不好用Adapter做,先上效果图,右边的动图来源于左边这个项目中的一个控件. 因为我们的项目中,六个通道的检测过程要同时动态显示,这样位置就要合理调配,因为六个通道采用的布局比较相似,所以当时考虑了Frag

自定义adapter的基础上Listview优化方案以及几个小错误(checkbox吃掉点击事件以及对象重复问题)

每次adapter运行都有一个getcount,有多少条就调用多少次getview,就会解析多少次xml文件(创建view,条数多了很消耗时间),13年谷歌提出了一个机制,每次只缓存一屏幕多几个,把划出屏幕外的listview回收(用的convertView),只要修改里面的值就可以重新用不用再创建一个view 修改的是自定义adapter中的getview方法 @Overridepublic View getView(int position, View convertView, ViewGr