【Android】以BaseAdapter做适配器的ListView及其性能优化

时间:2020-11-29 13:27:19

适配器的Java类

package com.app.adapter;

import org.json.JSONArray;
import org.json.JSONObject;

import android.R.integer;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.app.test01.R;

public class MyWeixinJSON extends BaseAdapter{
private LayoutInflater mInflater;// 动态布局映射
private JSONArray list;
private Context context;
private int i = 0;
public MyWeixinJSON(JSONArray list,Context context){
this.list = list;
this.context = context;
this.mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.length();
}

@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 View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
convertView = mInflater.inflate(R.layout.item_weixin, null);//根据布局文件实例化view
try {
JSONObject jObject = list.getJSONObject(position);

TextView title = (TextView) convertView.findViewById(R.id.title);//找某个控件
title.setText(jObject.get("title").toString());//给该控件设置数据(数据从集合类中来)
TextView time = (TextView) convertView.findViewById(R.id.time);
time.setText(jObject.get("time").toString());
TextView info = (TextView) convertView.findViewById(R.id.info);
info.setText(jObject.get("info").toString());
ImageView img = (ImageView) convertView.findViewById(R.id.img);
img.setBackgroundResource((Integer)jObject.get("img"));
} catch (Exception e) {
// TODO: handle exception
}
return convertView;
}
}

Activity类

package com.app.test01;

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

import org.json.JSONArray;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;

import com.app.adapter.MyWeixinJSON;
import com.app.adapter.MyWeixinList;

public class ListViewBase extends Activity{
private ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.weixin);
lv = (ListView) findViewById(R.id.lv);
MyWeixinJSON mJson = new MyWeixinJSON(getJSONArray(),this);
lv.setAdapter(mJson);
}
private JSONArray getJSONArray(){
JSONArray jsonArray = new JSONArray();
try {
for (int i = 1; i <= 30; i++) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("title", "姓名"+i);
jsonObject.put("time", "9月29日");
jsonObject.put("info", "我通过了你的好友验证请求,现在我们可以开始对话啦");
jsonObject.put("img", R.drawable.special_spring_head2);
jsonArray.put(jsonObject);

}
} catch (Exception e) {
// TODO: handle exception
}
return jsonArray;
}
}

ListView的性能优化

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
System.out.println("正在渲染第"+position+"行 +++ "+ i++);
OneView oneView;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item_weixin, null);//根据布局文件实例化view
oneView = new OneView();
oneView.title = (TextView) convertView.findViewById(R.id.title);//找某个控件
oneView.time = (TextView) convertView.findViewById(R.id.time);
oneView.info = (TextView) convertView.findViewById(R.id.info);
oneView.img = (ImageView) convertView.findViewById(R.id.img);
convertView.setTag(oneView);//把View和某个对象关联起来
} else {
oneView = (OneView) convertView.getTag();
}
JSONObject jObject = null;
try {
jObject = list.getJSONObject(position);//根据position获取集合类中某行数据
oneView.title.setText(jObject.get("title").toString());//给该控件设置数据(数据从集合类中来)
oneView.time.setText(jObject.get("time").toString());
oneView.info.setText(jObject.get("info").toString());
oneView.img.setBackgroundResource((Integer)jObject.get("img"));
} catch (Exception e) {
// TODO: handle exception
}
return convertView;
}
/** 把每行布局文件的各个控件包装成一个对象 */
private class OneView{
TextView title;
TextView time;
TextView info;
ImageView img;
}