当前位置: 代码迷 >> Android >> 【Android】以BaseAdapter作适配器的ListView及其性能优化
  详细解决方案

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

热度:33   发布时间:2016-04-28 07:58:05.0
【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;	}


  相关解决方案