listview,gridview等可通用的萬能適配器,繼承此類即可

抽出的ViewHolder通用類

public class ViewHolder {

private SparseArray<View> mViews;
private int mPosition;
private View mConvertView;

public ViewHolder(Context context,ViewGroup parent,int layoutId,int position){
this.mPosition=position;
this.mViews=new SparseArray<View>();
mConvertView=LayoutInflater.from(context).inflate(layoutId, parent, false);
mConvertView.setTag(this);

}

public static ViewHolder get(Context context,View convertView,ViewGroup parent,int layoutId,int position){
if(convertView==null){
return  new ViewHolder(context, parent, layoutId, position);
}else{
ViewHolder holder=(ViewHolder) convertView.getTag();
holder.mPosition=position;

return  holder;
}

}

public <T extends View> T getView(int viewId){
View view=mViews.get(viewId);
if(view==null){
view=mConvertView.findViewById(viewId);
mViews.put(viewId, view);
}

return  (T) view;

}

public View getConvertView() {
return mConvertView;
}


}

//可通用的適配器類,繼承此類可以節省很多代碼,尤其在需要寫很多listview時效果顯著

public abstract class CommonAdapter<T> extends BaseAdapter {
protected Context mContext;
protected List<T> mDatas;
protected LayoutInflater inflater;

private int layoutId;

public CommonAdapter(Context mContext, List<T> mDatas,int layoutId) {
this.mContext = mContext;
this.mDatas = mDatas;
inflater=LayoutInflater.from(mContext);
this.layoutId=layoutId;
}


@Override
public int getCount() {
// TODO Auto-generated method stub
return mDatas.size();
}


@Override
public T getItem(int position) {
// TODO Auto-generated method stub
return mDatas.get(position);
}


@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}


@Override
public  View getView(int position, View convertView, ViewGroup parent){
ViewHolder holder=ViewHolder.get(mContext, convertView, parent, layoutId, position);
convert(holder,getItem(position));
return holder.getConvertView();
}

public abstract void convert(ViewHolder holder,T t);
}


//需要使用於listview等的適配器實現類

public class My_Adapterwithviewholder extends CommonAdapter<Item> {


public My_Adapterwithviewholder(Context mContext, List<Item> list) {
super(mContext, list,R.layout.list_item);
}


@Override
public void convert(final ViewHolder holder, final Item t) {
// TODO Auto-generated method stub
((TextView) holder.getView(R.id.tv)).setText(t.getName());
((CheckBox) holder.getView(R.id.cb)).setChecked(t.ischecked);

((CheckBox) holder.getView(R.id.cb)).setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
t.setIschecked(((CheckBox) holder.getView(R.id.cb)).isChecked());
}
});

}


}

//實體類

public class Item implements Serializable{


/**

*/
private static final long serialVersionUID = 5757609779606275057L;


public String id;
public String name;
public boolean ischecked;




public boolean isIschecked() {
return ischecked;
}
public void setIschecked(boolean ischecked) {
this.ischecked = ischecked;
}
public Item(String id, String name) {
super();
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}


}

//主activity類

public class MainActivity extends Activity {
private ListView listview;
private List<Item> mList;
private My_Adapterwithviewholder viewholderadapter;



@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initview();

mList=new ArrayList<Item>();
for(int i=0;i<20;i++){
mList.add(new Item(i+"", "name"+i));
}

viewholderadapter=new My_Adapterwithviewholder(this, mList);
listview.setAdapter(viewholderadapter);
listview.setOnItemClickListener(new OnItemClickListener() {


@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "position: "+arg2, 0).show();
}
});

}


private void initview() {
// TODO Auto-generated method stub
listview=(ListView) findViewById(R.id.listview);

}
}



<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >


   <ListView
            android:id="@+id/listview"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"           
            android:cacheColorHint="@android:color/transparent"
            android:divider="@color/divider_color_middle"
            android:dividerHeight="0.5dip"
            android:fadingEdge="none"
            android:listSelector="@android:color/transparent" />


</RelativeLayout>



//佈局條目的代碼:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="58dip"
    android:paddingBottom="10dip"
    android:paddingLeft="10dip"
    android:descendantFocusability="blocksDescendants"
    android:paddingRight="10dip"
    android:paddingTop="10dip" >


    <ImageView
        android:id="@+id/iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"        
        android:src="@drawable/ic_launcher" />


    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="10dip"
        android:layout_toRightOf="@id/iv"
        android:maxLength="18"
        android:singleLine="true"
        android:text="1111111111"
        android:textColor="@color/grayblack_1F1F1F"
        android:textSize="22sp" />
    
    <CheckBox 
        android:id="@+id/cb"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginRight="18dip"
        
        android:layout_alignParentRight="true"
        />
    
    
    
    


</RelativeLayout>






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章