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

适配器的Java类

[java]  view plain copy
 
  1. package com.app.adapter;  
  2.   
  3. import org.json.JSONArray;  
  4. import org.json.JSONObject;  
  5.   
  6. import android.R.integer;  
  7. import android.content.Context;  
  8. import android.view.LayoutInflater;  
  9. import android.view.View;  
  10. import android.view.ViewGroup;  
  11. import android.widget.BaseAdapter;  
  12. import android.widget.ImageView;  
  13. import android.widget.TextView;  
  14.   
  15. import com.app.test01.R;  
  16.   
  17. public class MyWeixinJSON extends BaseAdapter{  
  18.     private LayoutInflater mInflater;// 动态布局映射  
  19.     private JSONArray list;  
  20.     private Context context;   
  21.     private int i = 0;  
  22.     public MyWeixinJSON(JSONArray list,Context context){  
  23.         this.list = list;  
  24.         this.context = context;  
  25.         this.mInflater = LayoutInflater.from(context);  
  26.     }  
  27.     @Override  
  28.     public int getCount() {  
  29.         // TODO Auto-generated method stub  
  30.         return list.length();  
  31.     }  
  32.   
  33.     @Override  
  34.     public Object getItem(int position) {  
  35.         // TODO Auto-generated method stub  
  36.         return null;  
  37.     }  
  38.   
  39.     @Override  
  40.     public long getItemId(int position) {  
  41.         // TODO Auto-generated method stub  
  42.         return 0;  
  43.     }  
  44.     @Override  
  45.     public View getView(int position, View convertView, ViewGroup parent) {  
  46.         // TODO Auto-generated method stub  
  47.         convertView = mInflater.inflate(R.layout.item_weixin, null);//根据布局文件实例化view  
  48.         try {  
  49.             JSONObject jObject = list.getJSONObject(position);  
  50.               
  51.             TextView title = (TextView) convertView.findViewById(R.id.title);//找某个控件  
  52.             title.setText(jObject.get("title").toString());//给该控件设置数据(数据从集合类中来)  
  53.             TextView time = (TextView) convertView.findViewById(R.id.time);  
  54.             time.setText(jObject.get("time").toString());  
  55.             TextView info = (TextView) convertView.findViewById(R.id.info);  
  56.             info.setText(jObject.get("info").toString());  
  57.             ImageView img = (ImageView) convertView.findViewById(R.id.img);  
  58.             img.setBackgroundResource((Integer)jObject.get("img"));  
  59.         } catch (Exception e) {  
  60.             // TODO: handle exception  
  61.         }  
  62.         return convertView;  
  63.     }  
  64. }  

Activity类

[java]  view plain copy
 
  1. package com.app.test01;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6.   
  7. import org.json.JSONArray;  
  8. import org.json.JSONObject;  
  9.   
  10. import android.app.Activity;  
  11. import android.os.Bundle;  
  12. import android.widget.ListView;  
  13.   
  14. import com.app.adapter.MyWeixinJSON;  
  15. import com.app.adapter.MyWeixinList;  
  16.   
  17. public class ListViewBase extends Activity{  
  18.     private ListView lv;  
  19.     @Override  
  20.     protected void onCreate(Bundle savedInstanceState) {  
  21.         // TODO Auto-generated method stub  
  22.         super.onCreate(savedInstanceState);  
  23.         setContentView(R.layout.weixin);  
  24.         lv = (ListView) findViewById(R.id.lv);  
  25.         MyWeixinJSON mJson = new MyWeixinJSON(getJSONArray(),this);  
  26.         lv.setAdapter(mJson);  
  27.     }  
  28.     private JSONArray getJSONArray(){  
  29.         JSONArray jsonArray = new JSONArray();  
  30.         try {  
  31.             for (int i = 1; i <= 30; i++) {  
  32.                 JSONObject jsonObject = new JSONObject();  
  33.                 jsonObject.put("title""姓名"+i);  
  34.                 jsonObject.put("time""9月29日");  
  35.                 jsonObject.put("info""我通过了你的好友验证请求,现在我们可以开始对话啦");  
  36.                 jsonObject.put("img", R.drawable.special_spring_head2);  
  37.                 jsonArray.put(jsonObject);  
  38.                   
  39.             }  
  40.         } catch (Exception e) {  
  41.             // TODO: handle exception  
  42.         }  
  43.         return jsonArray;  
  44.     }  
  45. }  

ListView的性能优化

[java]  view plain copy
 
  1. @Override  
  2. public View getView(int position, View convertView, ViewGroup parent) {  
  3.     // TODO Auto-generated method stub  
  4.     System.out.println("正在渲染第"+position+"行  +++  "+ i++);  
  5.     OneView oneView;  
  6.     if (convertView == null) {  
  7.         convertView = mInflater.inflate(R.layout.item_weixin, null);//根据布局文件实例化view  
  8.         oneView = new OneView();  
  9.         oneView.title = (TextView) convertView.findViewById(R.id.title);//找某个控件  
  10.         oneView.time = (TextView) convertView.findViewById(R.id.time);  
  11.         oneView.info = (TextView) convertView.findViewById(R.id.info);  
  12.         oneView.img = (ImageView) convertView.findViewById(R.id.img);  
  13.         convertView.setTag(oneView);//把View和某个对象关联起来  
  14.     } else {  
  15.         oneView = (OneView) convertView.getTag();  
  16.     }  
  17.     JSONObject jObject = null;  
  18.     try {  
  19.         jObject = list.getJSONObject(position);//根据position获取集合类中某行数据  
  20.         oneView.title.setText(jObject.get("title").toString());//给该控件设置数据(数据从集合类中来)  
  21.         oneView.time.setText(jObject.get("time").toString());  
  22.         oneView.info.setText(jObject.get("info").toString());  
  23.         oneView.img.setBackgroundResource((Integer)jObject.get("img"));  
  24.     } catch (Exception e) {  
  25.         // TODO: handle exception  
  26.     }  
  27.     return convertView;  
  28. }  
  29. /** 把每行布局文件的各个控件包装成一个对象  */  
  30. private class OneView{  
  31.     TextView title;  
  32.     TextView time;  
  33.     TextView info;  
  34.     ImageView img;  
  35. }  

你可能感兴趣的:(BaseAdapter)