您的位置:首页 > 移动开发 > Android开发

ListView缓存优化

2016-04-08 13:48 555 查看

说明

——说到ListView,大家就会想到Adapter,GridView、ListView都离不开Adapter。而Adapter最重要的方法是使用getView()来绘制页面,今天我来讲解一下ListView的缓存优化问题。

XML布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>

</LinearLayout>


ListView的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="vertical" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="50sp"
android:id="@+id/tv"/>

</LinearLayout>


主要方法

package com.example.listview;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
/**
1. ListView分布加载
2. @author WangJ
3.  */
public class MainActivity
a285
extends Activity {

private String[] tv = new String[] { "1", "2", "3", "4", "5", "6", "7",
"8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18",
"19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29",
"30" };

private ListView mListView;
private ArrayList<String> mlist = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mListView = (ListView) findViewById(R.id.list);
for (int i = 0; i < tv.length; i++) {
mlist.add(tv[i]);
}

mListView.setAdapter(new mListAdapter(getApplicationContext(), mlist));
}

class mListAdapter extends BaseAdapter {

private Context context;
private ArrayList<String> list;

public mListAdapter(Context context, ArrayList<String> list) {
this.context = context;
this.list=list;
}

@Override
public int getCount() {
return list.size();
}

@Override
public Object getItem(int position) {
return list.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View converview, ViewGroup arg2) {

System.out.println("getView " +position +"   "+ converview);
ViewHolder viewHolder = null;
if (converview == null) {
converview = View.inflate(context,R.layout.listview_item, null);
viewHolder = new ViewHolder();
viewHolder.textView = (TextView) converview.findViewById(R.id.tv);
converview.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) converview.getTag();
}
viewHolder.textView.setText(list.get(position));

return converview;
}

}

class ViewHolder {
private TextView textView;

}
}


[b]运行效果如图[/b]



这样就能利用ViewHolder 来让ListView每次不重复加载不必要的数据,从而优化内存
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息