王学岗ListView和源码解析(三)
来源:互联网 发布:android开源app源码 编辑:程序博客网 时间:2024/05/21 00:01
现在我么来学习ListView的第三个适配器——BaseAdapter自定义适配器,
看下代码:
Person类:
package com.example.listview;public class Person { private String name; private String number; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public Person() { super(); // TODO Auto-generated constructor stub } public Person(String name, String number) { super(); this.name = name; this.number = number; }}
MainActivity类
package com.example.listview;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.Checkable;import android.widget.ImageView;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.TextView;import android.widget.SimpleAdapter.ViewBinder;public class MainActivity extends Activity { private ListView lv_list; private List<Person> list_persons; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv_list = (ListView) findViewById(R.id.lv_list); // 自定义适配器数据 list_persons = new ArrayList<Person>(); // 初始化数据 initPerson(); //创建适配器 MyAdapter myAdapter = new MyAdapter(this, list_persons); //设置适配器 lv_list.setAdapter(myAdapter); } private void initPerson() { for (int i = 0; i < 20; i++) { Person person = new Person("孙策" + i, "年龄" + (i + 2000)); list_persons.add(person); } }}
MyAdapter类
package com.example.listview;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;public class MyAdapter extends BaseAdapter { private Context context; private List<Person> list_persons; private LayoutInflater layoutInflater; public MyAdapter(Context context, List<Person> persons) { super(); this.context = context; this.list_persons = persons; this.layoutInflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public Context getContext() { return context; } public void setContext(Context context) { this.context = context; } public List<Person> getPersons() { return list_persons; } public void setPersons(List<Person> persons) { this.list_persons = persons; } public MyAdapter() { super(); } @Override public int getCount() { return list_persons.size(); } @Override public Object getItem(int position) { return list_persons.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View v; if (convertView == null) { v = layoutInflater.inflate(R.layout.list_item, null); }else{ v= convertView; } Person person = list_persons.get(position); TextView name = (TextView) v.findViewById(R.id.tv_name); TextView number = (TextView) v.findViewById(R.id.tv_number); String pname = person.getName(); String pnumber = person.getNumber(); name.setText(pname); number.setText(pnumber); return v; }}
list_item布局文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <TextView android:id="@+id/tv_name" android:layout_width="120dp" android:layout_height="wrap_content" /> <TextView android:id="@+id/tv_number" android:layout_width="140dp" android:layout_height="wrap_content" /></LinearLayout>
activity_main.xml布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <ListView android:id="@+id/lv_list" android:layout_width="match_parent" android:layout_height="wrap_content" > </ListView></LinearLayout>
我们可以尝试修改MyAdapter类,ViewHolder类的复用,这种listview的优化方法可以防止图片错位(不明白不要紧,以后我会继续深入讲解listview的优化)
package com.example.listview;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;public class MyAdapter extends BaseAdapter { private Context context; private List<Person> list_persons; private LayoutInflater layoutInflater; public MyAdapter(Context context, List<Person> persons) { super(); this.context = context; this.list_persons = persons; this.layoutInflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public Context getContext() { return context; } public void setContext(Context context) { this.context = context; } public List<Person> getPersons() { return list_persons; } public void setPersons(List<Person> persons) { this.list_persons = persons; } public MyAdapter() { super(); } @Override public int getCount() { return list_persons.size(); } @Override public Object getItem(int position) { return list_persons.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHoler holder; if (convertView == null) { holder=new ViewHoler(); convertView = layoutInflater.inflate(R.layout.list_item, null); holder.tv_name = (TextView) convertView.findViewById(R.id.tv_name); holder.tv_number = (TextView) convertView.findViewById(R.id.tv_number); convertView.setTag(holder); } else { holder=(ViewHoler) convertView.getTag(); } Person person = list_persons.get(position); String pname = person.getName(); String pnumber = person.getNumber(); holder.tv_name.setText(pname); holder.tv_number.setText(pnumber); return convertView; } // ViewHolder对应的就是控件中某一行的视图 static class ViewHoler { TextView tv_name; TextView tv_number; }}
0 0
- 王学岗ListView和源码解析(三)
- 王学岗ListView和源码解析(一)
- 王学岗ListView和源码解析(二)
- android源码解析--ListView
- android源码解析--ListView
- ListView源码解析
- android listview源码解析
- listview源码解析
- Listview源码解析(一)
- ListView 源码解析
- ListView 源码解析
- ListView[2] 源码解析
- ListView源码解析
- ListView解析三
- ListView注意的问题和源码解析(上)
- android Listview的getView和convertview原理解析(三)
- ListView源码解析(二) Adapter
- AFNetworking源码解析<三>
- 提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
- 贪心1005
- Android布局的高按照比例来分布
- 【USACO题库】1.2.4 Palindromic Squares回文平方数
- 文件保存
- 王学岗ListView和源码解析(三)
- J
- Swift 学习记录(1)
- ora-12541:TNS:无监听程序
- JAVA利用HttpClient进行POST请求(HTTPS)
- C++ typedef的用法
- FastJSON 常用操作
- 随笔面试题
- 第三周 项目4(7)辩数字