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
原创粉丝点击