一、ListView的初級優化
public classMainActivity extends Activity {
privateListView lv;
privateList<DataBean> list;//DateBean是描述資料的類,list用於承載ListView要顯示的資料
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main
list= new ArrayList<Data>();
lv= (ListView) findViewById(R.id.lv);
lv.setAdapter(newLvAdapter());
}
classLvAdapter extends BaseAdapter {//以內部類的形式編寫。
//如果不以內部類的形式,則需在LvAdapter的構造方法中傳入context和承載資料的集合或//陣列。
@Override
publicint getCount() {
returnlist.size();//返回資料的總條數
}
@Override
publicObject getItem(int position) {
returnlist.get(position);//獲得當前位置上資料物件
}
@Override
publiclong getItemId(int position) {
System.out.println(position);
returnposition;//返回item的id
}
@Override//利用自帶引數優化ListView:convertView當第一個item完全移除螢幕時//才不為null,
//裡面是剛剛移出的item佈局的引用。
publicView getView(int position, View convertView, ViewGroup parent) {
//item中的控制元件
ImageViewiv;
TextViewtv;
if(convertView==null) {
convertView= View.inflate(getApplicationContext(), R.layout.lv_item, null);
iv= (ImageView) view.findViewById(R.id.iv);
tv= (TextView) view.findViewById(R.id.tv);
}else{
iv= (ImageView) convertView.findViewById(R.id.iv);
tv= (TextView) convertView.findViewById(R.id.tv);
}
iv.setBackgroundResource(list.get(position).getIcon());
tv.setText(list.get(position).getText());
returnview;
}
}
}
convertView原理: