现在的位置: 首页 > 综合 > 正文

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

2018年09月04日 ⁄ 综合 ⁄ 共 3721字 ⁄ 字号 评论关闭
文章目录

适配器的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;
	}

抱歉!评论已关闭.