自定义Adapter的listview(很重要)
2015-08-30 17:05
260 查看
首先介绍下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类做数据源
mainactivity
把数据通过适配器适配一定格式后,给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; @Override protected 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,写了一个方法,把人装进List Studentadapter 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; } @Override public int getCount() { //适配器是用来往listview传数据的,所以数据有多少条就返回多少 return mData.size(); } @Override public Object getItem(int position) { //用于返回这一行的数据,一般情况下只需要返回索引就能找到 return position; } @Override public long getItemId(int position) { return position;//要不要这行数据来个id,返回索引 } @Override public 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; } }
相关文章推荐
- openwrt 端口回流的关键
- 面试题30.最小的k个数
- C99标准支持结构体按成员名称进行指定初始化。
- 数组知识点
- 通过/dev/mem实现用户层访问GPIO寄存器
- 正则表达式
- HttpSession
- maven的一些错误
- [Leetcode] Binary Tree Paths
- APK反编译二次打包工具和方法
- Codeforces Round #318 B - Bear and Three Musketeers
- python 爬虫3 新浪微博 爬虫 实战
- 自定义adapter的基础上Listview优化方案以及几个小错误(checkbox吃掉点击事件以及对象重复问题)
- windows下,将免安装的tomcat加入系统服务
- PostCSS一种更优雅、更简单的书写CSS方式
- HUD5423 Rikka with Tree(DFS)
- 搜索算法
- CameraRotateAroundTarget
- 反射相关知识点小结
- redis 入门及看法