标签:android blog io ar os 使用 java for on
每次创建一个集合,都要创建 一个适配器,每次每次都因为数据的结构不一样而创建一个视图。
这里我创建了一个适配器,不管数据什么结构,都能使用该适配器进行数据装载。
package org.adapter;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Vector;
import org.asynctask.AsyncTaskManager;
import org.asynctask.ShowImgaeLater;
import org.tourists.R;
import org.utils.StringUtils;
import org.utils.TransformUtils;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class DataAdapter extends BaseAdapter {
protected String[] keys ;
protected int[]resIds;
protected Activity context ;
protected int layout ;
protected LayoutInflater layoutInflater ;
public List<?> datas ;
public DataAdapter( Activity context, List<?> datas,String[] keys, int[] resIds,
int layout) {
this.keys = keys;
this.resIds = resIds;
this.context = context;
this.layout = layout;
this.layoutInflater = LayoutInflater.from(context);
this.datas = datas;
}
@Override
public int getCount() {
return datas.size() ;
}
@Override
public Object getItem(int position) {
return datas.get(position);
}
@Override
public long getItemId(int position) {
return toInt(invoke(getItem(position), "id") );
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
if(null == convertView){
convertView = layoutInflater.inflate(layout, null ) ;
}else{
int upPostion = TransformUtils.toInt( convertView.getTag() ) ;
if( upPostion == position){
return convertView ;
}
}
Object target = getItem( position ) ;
for(int x=0;x<resIds.length;x++){
View view = convertView.findViewById(resIds[x]);
String key = keys[x] ;
String value = invoke(target, key) ;
if(view instanceof TextView){
TextView textView = (TextView) view ;
textView.setText( value ) ;
}else if( view instanceof ImageView){
ImageView imageView = (ImageView) view ;
imageView.setImageResource(R.drawable.no_show);
AsyncTaskManager.addTaskDao(new ShowImgaeLater()).execute(imageView , value );
}else{
// other View
}
}
convertView.setTag( position ) ;
return convertView ;
}
/**
* get method and invoke this method
* @param target
* @param fieldName
* */
protected String invoke(Object target , String fieldName){
getMethods(target.getClass()) ;
Method currentMethod = null ;
for(Method method : methods){
if("get".equals(method.getName())){
if(method.getParameterTypes().length == 1){
currentMethod = method ;
}
}
}
if(null == currentMethod){
String methodName = "get" + StringUtils.toFristUpper(fieldName) ;
for(Method method : methods){
if(methodName.equalsIgnoreCase(method.getName())){
if(method.getParameterTypes().length == 0){
currentMethod = method ;
}
}
}
return toString(methodInvoke(target, currentMethod)) ;
}else{
try {
return (String) currentMethod.invoke(target, fieldName) ;
} catch (Exception e) {
e.printStackTrace();
}
return toString(methodInvoke(target, currentMethod , fieldName ) ) ;
}
}
/**
* method invoke
* @param target
* @param method
* @param args
* */
protected Object methodInvoke(Object target , Method method , Object...args){
try {
return method.invoke(target, args) ;
} catch (Exception e) {
}
return null ;
}
List<Method> methods = new Vector<Method>();
/**
* get class all method
* @param class
* */
protected void getMethods(Class<?> clazz){
if(Object.class.equals(clazz)){
return ;
}
Method[]tempMethods = clazz.getDeclaredMethods() ;
for(Method method : tempMethods){
methods.add( method );
}
getMethods(clazz.getSuperclass());
}
/**
* obj to String
* */
public String toString(Object value) {
return null == value ? "" : value.toString().trim() ;
}
public int toInt(Object obj){
if (obj == null) {
return 0;
}
if (obj instanceof Number) {
Number number = (Number) obj;
return number.intValue();
}
String value = toString(obj);
try {
return Integer.parseInt(value);
} catch (Exception e) {
}
return 0;
}
}
</pre></p><p></p>该适配器调用方法如下:<pre name="code" class="java">ListView lv_scenic_show = (ListView) findViewById( R.id.lv_scenic_show ) ;
lv_scenic_show.setAdapter( new DataAdapter(this, points,
new String[]{"cover" , "pictureCount" , "audioCount" , "distance" , "sname" }
, new int[]{R.id.iv_scenic_item_main , R.id.tv_scenic_pic ,R.id.tv_scenic_mp3 ,
R.id.tv_scenic_distance , R.id.tv_scenic_panorama_scenics_name }
, R.layout.scenic_panorama_item ) ) ; 标签:android blog io ar os 使用 java for on
原文地址:http://blog.csdn.net/hfmbook/article/details/41694307