【Android】以BaseAdapter做适配器的ListView及其性能优化
适配器的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; }