ListView的运行效率与点击事件
来源:互联网 发布:淘宝图片设计软件 编辑:程序博客网 时间:2024/05/20 07:52
- 提升ListView的运行效率
- ListView的缓存原理
- 程序
- ListView的缓存原理
- ListView水果界面及各种效果图
- ListView界面
- MyFruitActivity
- 全选和反选XML文件
- 水果布局XML文件
- Fruit类
- Fruitadapter适配器
- 结果图
- 提升ListView的运行效率
提升ListView的运行效率
ListView的缓存原理
1、Adapter是ListView与数据之间的桥梁
2、ListView在开始绘制的时候,系统首先调用getCount()方法,根据返回值得到ListView的长度,然后根据这个长度,调用getView()一行一行地绘制ListView的每一项。
3、当ListView的每一项将要显示时,都会调用Adapter的getView()方法返回一个View。
4、ListView中有多少项,就调用多少次getView()方法去创建每一项的View,这一过程是耗时操作。
程序
public class MyListViewActivity extends AppCompatActivity {private ListView mListView; private List<Student> mData; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_list_view); mListView= (ListView) findViewById(R.id.listview); initData(); LayoutInflater inflater=getLayoutInflater(); Studentadapter adapter=new Studentadapter(inflater,mData); mListView.setAdapter(adapter); } private void initData() { mData=new ArrayList<>(); Student zhangsan=new Student("张三","20","男","吃",R.mipmap.uqiwei); Student lisi=new Student("李四","22","女","睡觉",R.mipmap.yangmi); Student wangwu=new Student("王五","25","男","打游戏",R.mipmap.ic_launcher); Student zhaoliu=new Student("赵六","23","女","逛街",R.mipmap.uqiwei); for(int i=0;i<50;i++) { mData.add(zhangsan); mData.add(lisi); mData.add(wangwu); mData.add(zhaoliu); } }"****************************************************"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; } @Override public View getView(int position, View convertView, ViewGroup parent) { //LayoutInflater Student student = mData.get(position); ViewHolder viewHolder = null; if (convertView == null) { viewHolder = new ViewHolder(); convertView = mInflater.inflate(R.layout.simple_adapter, null); viewHolder.imageView = (ImageView) convertView.findViewById(R.id.imageview_photo); viewHolder.textView_name = (TextView) convertView.findViewById(R.id.textview_name); viewHolder.textView_age = (TextView) convertView.findViewById(R.id.textview_age); viewHolder.textView_sex = (TextView) convertView.findViewById(R.id.textview_sex); viewHolder.textView_hobby = (TextView) convertView.findViewById(R.id.textview_hobby); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.textView_name.setText(student.getName()); viewHolder.textView_age.setText(student.getAge()); viewHolder.textView_hobby.setText(student.getHobby()); viewHolder.textView_sex.setText(student.getSex()); viewHolder.imageView.setImageResource(student.getImg()); return convertView; } class ViewHolder { TextView textView_name; TextView textView_age; TextView textView_sex; TextView textView_hobby; ImageView imageView; }}"*******************************************"<?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"> <ImageView android:id="@+id/imageview_photo" android:layout_width="100dp" android:layout_height="100dp" android:src="@mipmap/yangmi" /><LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_margin="20dp"> <TextView android:id="@+id/textview_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="姓名"/> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" > <TextView android:id="@+id/textview_age" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="年龄"/> <TextView android:id="@+id/textview_sex" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="性别"/> </LinearLayout> <TextView android:id="@+id/textview_hobby" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="爱好"/></LinearLayout></LinearLayout>"********************************************************"public class Student { private String name; private String hobby; private String age; private String sex; private int img; public Student(String name,String age,String sex,String hobby,int img){ this.name=name; this.age=age; this.sex=sex; this.hobby=hobby; this.img=img; } public int getImg() { return img; } public void setImg(int img) { this.img = img; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void setHobby(String hobby) { this.hobby = hobby; } public void setAge(String age) { this.age = age; } public void setSex(String sex) { this.sex = sex; } public String getSex() { return sex; } public String getHobby() { return hobby; } public String getAge() { return age; }}
结果图:
ListView水果界面及各种效果图
ListView界面
<?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"> <ListView android:id="@+id/listview_fruit" android:layout_width="match_parent" android:layout_height="wrap_content"> </ListView></LinearLayout>
MyFruitActivity
public class MyFruitActivity extends AppCompatActivity {private ListView mListView; private List<Fruit> mFruits; private Fruitadapter adapter; private LayoutInflater Inflater; private View mHeaderView; private Button mBtnCheckedAll; private View mFooterView; private Button mBtnCheckedOver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_fruit); mListView= (ListView) findViewById(R.id.listview_fruit); Inflater=getLayoutInflater(); initData(); mFooterView=Inflater.inflate(R.layout.fruit_footer, null); mHeaderView=Inflater.inflate(R.layout.fruit_header,null); mBtnCheckedOver= (Button) mFooterView.findViewById(R.id.button_overChecked); mBtnCheckedAll= (Button) mHeaderView.findViewById(R.id.button_allChecked); mBtnCheckedOver.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { adapter.checkedOver(); } }); mBtnCheckedAll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //此处要全选 adapter.checkedAll(); } }); mListView.addHeaderView(mHeaderView); mListView.addFooterView(mFooterView); adapter=new Fruitadapter(Inflater,mFruits); mListView.setAdapter(adapter); mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Log.d("myfruit","点击的水果是:"+mFruits.get(position-1).getName()); adapter.itemSelect(position-1); } }); } private void initData() { mFruits=new ArrayList<>(); for(int i=0;i<50;i++) { Fruit apple=new Fruit("苹果",R.mipmap.pineapple); Fruit banana=new Fruit("香蕉",R.mipmap.fbanana); Fruit strawberry=new Fruit("葡萄",R.mipmap.fstrawberry); mFruits.add(apple); mFruits.add(banana); mFruits.add(strawberry); } }
全选和反选XML文件
<?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"><Button android:id="@+id/button_allChecked" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="全选"/></LinearLayout>"********************************************************"<?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"><Button android:id="@+id/button_overChecked" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="反选"/></LinearLayout>
水果布局XML文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="horizontal" tools:context="com.example.administrator.mywiget.MyFruitActivity"> <CheckBox android:id="@+id/checkbox_choose" android:layout_width="wrap_content" android:layout_height="wrap_content" android:focusable="false" android:text="选择水果"/> <ImageView android:id="@+id/imageview_fruit" android:layout_width="100dp" android:layout_height="100dp" android:src="@mipmap/peach"/> <TextView android:id="@+id/textview_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="苹果" /></LinearLayout>
布局视图:
Fruit类
public class Fruit { private String name; private int Img; private boolean isChecked; public boolean isChecked() { return isChecked; } public void setIsChecked(boolean isChecked) { this.isChecked = isChecked; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getImg() { return Img; } public void setImg(int img) { Img = img; } public Fruit(String name, int img) { this.name = name; Img = img; }}
Fruitadapter适配器
public class Fruitadapter extends BaseAdapter { private List<Fruit> mFruits; private LayoutInflater mInflater; private boolean[] mManagerAllCheckBox; public Fruitadapter(LayoutInflater Inflater, List<Fruit> Fruits) { mInflater = Inflater; mFruits = Fruits; //有多少条数据就有多少个checkBox mManagerAllCheckBox = new boolean[Fruits.size()]; } /** * 全部选择 */ public void checkedAll(){ for(int i=0;i<mManagerAllCheckBox.length;i++){ mManagerAllCheckBox[i]=true; } notifyDataSetChanged(); } public void checkedOver(){ for (int i=0;i<mManagerAllCheckBox.length;i++){ mManagerAllCheckBox[i]=!mManagerAllCheckBox[i]; } notifyDataSetChanged(); } public void itemSelect(int position) { mManagerAllCheckBox[position] = !mManagerAllCheckBox[position]; notifyDataSetChanged(); } @Override public int getCount() { return mFruits.size(); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (convertView == null) { convertView = mInflater.inflate(R.layout.activity_my_fruit, null); viewHolder = new ViewHolder(); viewHolder.checkBox = (CheckBox) convertView.findViewById(R.id.checkbox_choose); viewHolder.imageView = (ImageView) convertView.findViewById(R.id.imageview_fruit); viewHolder.textView = (TextView) convertView.findViewById(R.id.textview_name); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } Fruit fruit = mFruits.get(position); viewHolder.imageView.setImageResource(fruit.getImg()); viewHolder.textView.setText(fruit.getName()); viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { Log.d("myFruit", "选择框发生的变化:" + isChecked); mManagerAllCheckBox[position] = isChecked; notifyDataSetChanged(); } }); viewHolder.checkBox.setChecked(mManagerAllCheckBox[position]); return convertView; } class ViewHolder { CheckBox checkBox; ImageView imageView; TextView textView; }}
结果图
0 0
- ListView的运行效率与点击事件
- ListView提升运行效率及增加点击事件
- 第六部分:自定义控件,ListView详解,提升ListView运行效率,为ListView添加点击事件监听器
- RecyclerView与ListView点击事件的区别
- listview的点击事件
- ListView的点击事件
- listview的点击事件
- listview的onitemclick事件与adapter中的点击事件冲突
- ListView中的滑动事件与Item的点击事件
- 提升ListView的运行效率
- ListView运行效率的优化
- 提升ListView的运行效率
- 提升ListView的运行效率
- 提升ListView的运行效率
- 提升ListView的运行效率
- ListView与Button的共存问题解决(点击事件)
- ListView的数据绑定与点击事件读取信息
- ListView的item点击事件
- 数组类型 多维参数
- hdu 1671
- Intent填坑
- A simple problem
- Android Studio调试功能使用总结【转】
- ListView的运行效率与点击事件
- java中日期工具类
- Visual C#2010学习笔记八之out和ref的使用
- HDU 2068 RPG的错排(错排+排列组合)
- 点的双连通分量问题
- 两个栈实现一个队列
- Linux CentOS 7.0下编译安装MySQL 5.6.15【图文详情】
- Ubuntu下配置samba实现文件夹共享
- 学习笔记 类别与协议