懶得寫Adapter

自定義一個adapter

懶得寫adapter,就自定義了一個,其實就是在new一個adapter的時候將getView方法也寫了。

AdapterHelper

一個adapter的幫助類
代碼如下:

import java.util.List;
import android.content.Context;
import android.util.SparseArray;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

public class AdapterHelper<T> {

    private SparseArray<View> views;
    private Context context;

    private List<T> list;

    private View v;

    public Context getContext() {
        return context;
    }

    public void setContext(Context context) {
        this.context = context;
    }

    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }

    public View getV() {
        return v;
    }

    public void setV(View v) {
        this.v = v;
    }

    public AdapterHelper() {
        super();
        views = new SparseArray<View>();
    }

    public AdapterHelper(Context context, List<T> list, View v) {
        super();
        this.context = context;
        this.list = list;
        this.v = v;
        views = new SparseArray<View>();
    }

    public void setTextViewText(int rid, CharSequence string) {
        View view = views.get(rid);
        if (view != null && view instanceof TextView) {
            TextView tv = (TextView) view;
            tv.setText(string);

        } else {
            views.put(rid, v.findViewById(rid));
        }

    }

    public void setImageViewResource(int rid, int resid) {
        View view = views.get(rid);
        if (view != null && view instanceof ImageView) {
            ImageView iv = (ImageView) view;
            iv.setImageResource(resid);

        } else {
            views.put(rid, v.findViewById(rid));
        }

    }

    public void setViewBackgroundResource(int rid, int resid) {
        View view = views.get(rid);
        if (view != null) {

            view.setBackgroundResource(resid);

        } else {
            views.put(rid, v.findViewById(rid));
        }

    }

    public View getViewById(int rid) {
        View view = views.get(rid);
        if (view == null) {
            view = v.findViewById(rid);
        }
        return view;

    }

}

CanBaseAdapter

此adapter就是我們要用的adapter
代碼如下:

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

public abstract class CanBaseAdapter<T> extends BaseAdapter {

    public Context context;
    public List<T> list;
    public AdapterHelper<T> helper;
    public int rid;

    public CanBaseAdapter(Context c, int rid,List<T> list) {
        context = c;
        this.list = list;
        this.rid=rid;

        helper = new AdapterHelper<T>(c, list, null);


    }

    public void clear() {
        list = new ArrayList<T>();
        notifyDataSetChanged();
    }

    public void addAll(List<T> data) {

        if (list == null) {
            list = new ArrayList<T>();
        }
        list.addAll(data);
        notifyDataSetChanged();
    }

    public void refreshView(List<T> data) {
        if (list == null) {
            list = new ArrayList<T>();
        }
        list = data;
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {

        if (list == null) {
            return 0;
        }
        return list.size();
    }

    @Override
    public Object getItem(int position) {

        return list.get(position);
    }

    @Override
    public long getItemId(int position) {

        return position;
    }

    @Override
    public View getView(int position, View v, ViewGroup parent) {

        if (v==null) {
             v = LayoutInflater.from(context).inflate(rid, null);
            helper.setV(v);
        }

        initViewItem(helper, position,v);



        return v;
    }

    protected abstract void initViewItem(AdapterHelper<T> helper, int position,View v);
}

使用方法

代碼如下:

mAdapter = new CanBaseAdapter<Bean>(
                this, R.layout.item_list, mDatas)
        {
            @Override
            protected void initViewItem(AdapterHelper<Bean> helper,
                    final int position, View v) {
                Bean item = helper.getList().get(position);

                helper.setTextViewText(R.id.tv_title, item.getTitle());
                helper.setTextViewText(R.id.tv_describe, item.getDesc());
                helper.setTextViewText(R.id.tv_phone, item.getPhone());
                helper.setTextViewText(R.id.tv_time, item.getTime());
                v.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View paramView) {
                        switch (position) {
                        case 0:
                            System.out.println("one");
                            break;
                        case 1:
                            System.out.println("two");
                            break;
                        }       
                    }
                });
            }
        };

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