ListView、Spinner、RecycleView的CommonAdapter

参考网上,自己总结的项目中经常用到的adapter

ListView

package com.wiseljz.dy.common;

import android.content.Context;
import android.support.annotation.LayoutRes;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.List;

/**
 * Created by l.wang(516066490@qq.com) on 2017/7/18.
 */
public abstract class CommonAdapter<T> extends BaseAdapter
{
    protected List<T> data;
    protected Context context;

    public CommonAdapter(Context context) {
        this(context, null);
    }

    public CommonAdapter(Context context, List<T> data) {
        this.context = context;
        this.data = data;
    }

    @Override
    public int getCount() {
        return data == null ? 0 : data.size();
    }

    @Override
    public T getItem(int position) {
        if(data == null || position<0 ||position>=data.size())
        {
            return null;
        }

        return data.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

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

    /**
     * 设置adapter item layout resource id
     * 
     * @return
     */
    public abstract @LayoutRes
    int getItemLayoutRes(int position);

    /**
     * 开发者实现该方法,进行业务处理
     */
    public abstract void convert(ViewHolder holder, T item);

    public List<T> getData() {
        return data;
    }

    public void setData(List<T> data) {
        this.data = data;
    }

    public static class ViewHolder {
        private View convertView;
        private SparseArray<View> views;
        private int position;

        public ViewHolder(Context context, ViewGroup parent, int layoutId,
                          int position) {
            this.position = position;
            this.views = new SparseArray<View>();
            convertView = LayoutInflater.from(context).inflate(layoutId,
                    parent, false);
            convertView.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.position = position;
                return holder;
            }
        }

        public View findViewById(int id) {
            View v = views.get(id);
            if (v == null) {
                v = convertView.findViewById(id);
                views.put(id, v);
            }
            return v;
        }

        public View getConvertView() {
            return convertView;
        }

        public ViewHolder setText(int viewResId, String text) {
            TextView tv = (TextView) findViewById(viewResId);
            tv.setText(text);
            return this;
        }

        public int getPosition() {
            return position;
        }

    }

}

使用:

        mNavAdapter = new CommonAdapter<Node>(context)
        {
            @Override
            public int getItemLayoutRes(int position) {
                return R.layout.item_nav1;
            }

            @Override
            public void convert(ViewHolder holder, Node item) {
                holder.setText(R.id.tv, item.getCname());
            }
        };
        mNav.setAdapter(mNavAdapter);

Spinner

package com.wiseljz.dy.adapter;

import android.content.Context;
import android.content.res.Resources;
import android.support.annotation.LayoutRes;
import android.support.annotation.Nullable;
import android.support.v7.widget.ThemedSpinnerAdapter;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.wiseljz.dy.common.CommonAdapter;

import java.util.List;

/**
 * Created by l.wang(516066490@qq.com) on 2017/7/18.
 */
public abstract class SpinnerThemedAdapter<T> extends CommonAdapter<T> implements ThemedSpinnerAdapter
{
    private final ThemedSpinnerAdapter.Helper mDropDownHelper;

    public SpinnerThemedAdapter(Context context) {
        this(context, null);
    }

    public SpinnerThemedAdapter(Context context, List<T> data) {
        super(context, data);
        mDropDownHelper = new ThemedSpinnerAdapter.Helper(context);
    }

    @Override
    public void setDropDownViewTheme(@Nullable Resources.Theme theme) {
        mDropDownHelper.setDropDownViewTheme(theme);
    }

    @Nullable
    @Override
    public Resources.Theme getDropDownViewTheme() {
        return mDropDownHelper.getDropDownViewTheme();
    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = ViewHolder.get(context, convertView, parent,
                getDropDownItemLayoutRes(position), position);
        dropdownConvert(holder,getItem(position));

        return holder.getConvertView();
    }

    public abstract void dropdownConvert(ViewHolder holder, T item);

    public abstract @LayoutRes int getDropDownItemLayoutRes(int position);

}

使用

        mSalaryExpectAdapter = new SpinnerThemedAdapter<String>(context, Arrays.asList(getResources().getStringArray(R.array.salary_expect)))
        {
            @Override
            public void dropdownConvert(ViewHolder holder, String item) {
                holder.setText(R.id.tv, item);
            }

            @Override
            public int getDropDownItemLayoutRes(int position) {
                return R.layout.item_spinner_dropdown;
            }

            @Override
            public int getItemLayoutRes(int position) {
                return R.layout.item_spinner;
            }

            @Override
            public void convert(ViewHolder holder, String item) {
                holder.setText(R.id.tv, item);
            }

        };
        mSpinnerSalaryExpect.setAdapter(mSalaryExpectAdapter);

RecycleView

package com.wiseljz.dy.common;

import android.support.v7.widget.RecyclerView;

import java.util.List;

/**
 * Created by l.wang(516066490@qq.com) on 2017/7/18.
 */
public  abstract class CommonRVAdapter<T> extends RecyclerView.Adapter
{
    private List<T> data;

    public CommonRVAdapter() {
    }

    public CommonRVAdapter(List<T> data) {
        this.data = data;
    }

    @Override
    public int getItemCount() {
        return data == null ? 0 : data.size();
    }


    public List<T> getData() {
        return data;
    }

    public void setData(List<T> data) {
        this.data = data;
    }
}

使用

        mSubNav.setLayoutManager(new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.HORIZONTAL));
        mSubNavAdapter = new CommonRVAdapter<Node>()
        {
            @Override
            public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                View v = LayoutInflater.from(context).inflate(R.layout.item_subnav, parent, false);
                return new RecyclerView.ViewHolder(v)
                {
                };
            }

            @Override
            public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
                ImageView iv = (ImageView) holder.itemView.findViewById(R.id.iv);
                Utils.loadIntoUseFitWidth(context, ApiManager.IMG_HOST + getData().get(holder.getAdapterPosition()).getImg_url(), iv);
                iv.findViewById(R.id.iv).setOnClickListener(new View.OnClickListener()
                {
                    @Override
                    public void onClick(View v) {
                        mPresenter.onSubNavClick(getData().get(holder.getAdapterPosition()));
                    }
                });
            }
        };
        mSubNav.setAdapter(mSubNavAdapter);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值