標籤:listview最佳化
package com.example.ex_000_example;
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener {
//準備好的圖片資源
private int[] imageList = new int[] { R.drawable.qq0, R.drawable.qq1,
R.drawable.qq2, R.drawable.qq3, R.drawable.qq4, R.drawable.qq5,
R.drawable.qq6, R.drawable.qq7, R.drawable.qq8, R.drawable.qq9,
R.drawable.qq10, R.drawable.qq11, R.drawable.qq12, R.drawable.qq13,
R.drawable.qq14 };
private ArrayList<MyDate> dateList = new ArrayList<MyDate>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 準備資料
for (int i = 0; i < imageList.length; i++) {
MyDate myDate = new MyDate("資料來了"+i, imageList[i]);
dateList.add(myDate);
}
ListView listView = (ListView) findViewById(R.id.listView1);
MyAdapter myAdapter = new MyAdapter();
// 設定適配器
listView.setAdapter(myAdapter);
}
//減少控制項尋找次數
class ViewHolder {
TextView textView;
ImageView imageView;
}
class MyAdapter extends BaseAdapter {
// 設定每行的樣式以及顯示
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View inflate = null;
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
// 得到布局轉換器
LayoutInflater inflater = getLayoutInflater();
// 將布局xml檔案轉換成布局對象
inflate = inflater.inflate(R.layout.list_item, null);
// 尋找控制項,一定要尋找該布局對象上有的控制項
holder.textView = (TextView) inflate
.findViewById(R.id.textView1);
holder.imageView = (ImageView) inflate
.findViewById(R.id.imageView1);
// 將儲存控制項的對象存入行布局對象的tag中
inflate.setTag(holder);
} else {
// 讓那個已經完全消失的布局對象,去替代即將出現的
inflate = convertView;
// 從行布局對象中取出之前存好的控制項
holder = (ViewHolder) inflate.getTag();
}
// 根據position從容器中取出資料
MyDate myDate = dateList.get(position);
// 將資料顯示到控制項上
holder.textView.setText(myDate.title);
holder.imageView.setImageResource(myDate.image);
return inflate;
}
// 決定了listview顯示的行數
@Override
public int getCount() {
// TODO Auto-generated method stub
return dateList.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
class MyDate{
String title;
int image;
public MyDate(String title, int image) {
super();
this.title = title;
this.image = image;
}
}
}
本文出自 “破公子” 部落格,請務必保留此出處http://pogongzi.blog.51cto.com/8982426/1621265
android listView效能最佳化