Android开发——BaseAdapter的优化
来源:互联网 发布:淘宝没有安能物流 编辑:程序博客网 时间:2024/06/06 18:57
上一篇我们讲的是BaseAdapter的基本用法,我们最后说了getView这个方法是界面上有多少个列就加载多少列的,我们可以想象一下当我们从网上获取数据,比如我们的QQ空间,我们同时有很多很多的好友动态加载出来,那这样是不是就有很大的问题?首先是加载资源太多,我们的手机会变得很卡很卡,然后就是它加载的时候一下资源全部加载出来了,那这些内容是不是还有我们以前看过的,我们都不需要去看他,但是我们加载了,那就造成了浪费。这个时候我们就可以通过对BaseAdapter进行优化,减少加载的内容。
我们就在代码上用注解的形式讲一讲,也不去用新的例子,就用上一篇的吧,我们把完整的代码贴一下。
activity_main.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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.baseadapter.MainActivity" > <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent"/></LinearLayout>自定义的mylistitem.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" android:orientation="horizontal" > <ImageView android:id="@+id/iv" android:layout_width="60dp" android:layout_height="60dp" /> <RelativeLayout android:id="@+id/rl" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/tv1" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/tv2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentBottom="true"/> </RelativeLayout></LinearLayout>
bean对象News.java
package com.example.bean;public class News {private int icon;private String title;private String time;public int getIcon() {return icon;}public void setIcon(int icon) {this.icon = icon;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getTime() {return time;}public void setTime(String time) {this.time = time;}public News(int icon, String title, String time) {super();this.icon = icon;this.title = title;this.time = time;}}
MainActivity.java
package com.example.listviewBetter;import java.util.ArrayList;import java.util.List;import com.example.bean.News;import android.app.Activity;import android.os.Bundle;import android.widget.ListView;public class MainActivity extends Activity {private ListView listView;private List<News> list;MyAdapter adapther;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);listView = (ListView) findViewById(R.id.lv);list = new ArrayList<News>();News news1 = new News(R.drawable.ic_launcher, "习近平高校思想政治讲话", "2016-12-9");list.add(news1);News news2 = new News(R.drawable.ic_launcher, "智能制造“十三五”规划", "2016-12-12");list.add(news2);News news3 = new News(R.drawable.ic_launcher, "坚决反对部署萨德", "2016-12-9");list.add(news3);News news4 = new News(R.drawable.ic_launcher, "习近平高校思想政治讲话", "2016-12-9");list.add(news4);News news5 = new News(R.drawable.ic_launcher, "智能制造“十三五”规划", "2016-12-12");list.add(news5);News news6= new News(R.drawable.ic_launcher, "坚决反对部署萨德", "2016-12-9");list.add(news6);News news7 = new News(R.drawable.ic_launcher, "习近平高校思想政治讲话", "2016-12-9");list.add(news7);News news8= new News(R.drawable.ic_launcher, "智能制造“十三五”规划", "2016-12-12");list.add(news8);News news9 = new News(R.drawable.ic_launcher, "坚决反对部署萨德", "2016-12-9");list.add(news9);News news10= new News(R.drawable.ic_launcher, "习近平高校思想政治讲话", "2016-12-9");list.add(news10);News news11= new News(R.drawable.ic_launcher, "智能制造“十三五”规划", "2016-12-12");list.add(news11);News news12= new News(R.drawable.ic_launcher, "坚决反对部署萨德", "2016-12-9");list.add(news12);adapther = new MyAdapter(this, list);listView.setAdapter(adapther);}}自定义的MyAdapter.java
package com.example.listviewBetter;import java.util.List;import com.example.bean.News;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;public class MyAdapter<ViewHolder> extends BaseAdapter {private Context context;private List<News> list;public MyAdapter() {super();}public MyAdapter(Context context, List<News> list) {// TODO Auto-generated constructor stubthis.context = context;this.list = list;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn list.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn list.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn 0;}//很多人认为BaseAdapter有三种运用的方式,逗比式,普通式,文艺式。@Overridepublic View getView(int position, View convertView, ViewGroup parent) {//逗比式/*View convertView = View.inflate(context, R.layout.mylistitem, null);ImageView icon_iv = (ImageView) convertView.findViewById(R.id.iv);TextView title_tv = (TextView) convertView.findViewById(R.id.tv1);TextView time_tv = (TextView) convertView.findViewById(R.id.tv2);News news = list.get(position);int icon = news.getIcon();String title = news.getTitle();String time = news.getTime();icon_iv.setImageResource(icon);title_tv.setText(title);time_tv.setText(time);*///普通式,优化复用convertView/*if (convertView==null) {convertView=View.inflate(context, R.layout.mylistitem, null);}ImageView icon_iv = (ImageView) convertView.findViewById(R.id.iv);TextView title_tv = (TextView) convertView.findViewById(R.id.tv1);TextView time_tv = (TextView) convertView.findViewById(R.id.tv2);News news = list.get(position);int icon = news.getIcon();String title = news.getTitle();String time = news.getTime();icon_iv.setImageResource(icon);title_tv.setText(title);time_tv.setText(time);*///文艺式,ViewHolder重用组件ViewHolder viewholder=null;if (convertView==null) {convertView=View.inflate(context, R.layout.mylistitem, null);viewholder = new ViewHolder();viewholder.icon_iv = (ImageView) convertView.findViewById(R.id.iv);viewholder.title_tv = (TextView) convertView.findViewById(R.id.tv1);viewholder.time_tv = (TextView) convertView.findViewById(R.id.tv2);convertView.setTag(viewholder);}else {viewholder=(ViewHolder) convertView.getTag();}News news=list.get(position);viewholder.icon_iv.setBackgroundResource(news.getIcon());viewholder.title_tv.setText(news.getTitle());viewholder.time_tv.setText(news.getTime());return convertView;}// 起到缓存作用的类static class ViewHolder {ImageView icon_iv;TextView title_tv;TextView time_tv;}}
0 0
- Android开发——BaseAdapter的优化
- Android开发————Android ListView使用BaseAdapter与ListView的优化
- Android开发——BaseAdapter的使用
- Android——数据适配器 BaseAdapter的使用和优化
- Android:BaseListAdapter——提高开发效率的BaseAdapter
- Android开发技巧——BaseAdapter的另一种优雅封装
- Android移动开发 ListView使用BaseAdapter与ListView的优化,内存优化处理(转载)
- Android基础入门教程——2.4.3 BaseAdapter优化
- Android课堂笔记——BaseAdapter及其优化
- Android中的BaseAdapter的使用极其优化
- Android开发————BaseAdapter学习笔记
- Android开发————ListView与BaseAdapter
- Android:BaseListAdapter——摒弃ViewHolder使开发更高效的BaseAdapter
- Android开发——使用BaseAdapter做一个简单的新闻效果
- ## BaseAdapter的优化 ##
- BaseAdapter 的优化
- 优化使用的BaseAdapter
- BaseAdapter的优化
- 06、C语言-结构体
- ios UIDevice类以及Info.plist文件
- Java集合怎么一边删除一边遍历
- nyoj1311勤奋的涟漪
- Homebrew简介及安装
- Android开发——BaseAdapter的优化
- 约翰霍姆金斯大学_the I-STAR Lab
- 查看用户权限与GRANT用法
- xchfjgikyuiksdy
- form-data/x-www-form-urlencoded/raw/binary
- torch环境搭建
- 对JAVA集合进行遍历删除时务必要用迭代器
- NuttX的学习笔记 9
- java代码混淆