Android打造万能适配器(Adapter)

废话少说,直接贴代码~

public abstract class MyAdapter<T> extends BaseAdapter{
    private ArrayList<T> mData;
    private int mLayoutRes;
    public MyAdapter(ArrayList <T> mData, int layout){
        this.mData=mData;
        this.mLayoutRes=layout;
    }
    @Override
    public int getCount() {
        return mData!=null?mData.size ():0;
    }

    @Override
    public T getItem(int i) {
        return mData.get ( i );
    }

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

    @Override
    public View getView(int position, View converView, ViewGroup parent) {
        ViewHolder holder=ViewHolder.bind ( parent.getContext (),converView,parent,mLayoutRes,position );
        bindView ( holder, getItem ( position ) );
        return holder.getItemView ();
    }

    public abstract void bindView(ViewHolder holder, T obj);

    public static class ViewHolder {
        private SparseArray <View> mViews;   //存储listview中item的view
        private View item;                  //存放converView
        private int position;               //游标
        private Context mContext;           //上下文

        //构造方法
        public ViewHolder(Context context, ViewGroup parent, int layoutRes) {
            mViews = new SparseArray <> ( );
            this.mContext = context;
            View converView = LayoutInflater.from ( mContext ).inflate ( layoutRes, parent, false );
            converView.setTag ( this );
            item = converView;
        }

        /**
         * 绑定ViewHolder与item方法
         */
        public static  ViewHolder bind(Context context, View converView, ViewGroup parent, int layoutRes, int position) {
            ViewHolder holder;
            if (converView == null) {
                holder = new ViewHolder ( context, parent, layoutRes );
            } else {
                holder = (ViewHolder) converView.getTag ( );
                holder.item = converView;
            }
            holder.position = position;
            return holder;
        }

        /**
         * 根据id获取集合中控件
         */
        @SuppressWarnings("unchecked")
        public <T extends View> T getView(int id) {
            T t = (T) mViews.get ( id );
            if (t == null) {
                t = (T) item.findViewById ( id );
                mViews.put ( id, t );
            }
            return t;
        }
        /**
         * 获取当前条目
         * */
        public  View getItemView(){
            return item;
        }
        /**
         * 获取条目的位置
         * */
        public int getPosition(){
            return position;
        }
        /**
         * 设置文字
         * */
        public ViewHolder setText(int id,CharSequence text){
            View view =getView ( id );
            if (view instanceof TextView){
                ((TextView) view).setText ( text );
            }
            return this;
        }
        /**
         * 设置图片
         */
        public ViewHolder setImageResource(int id, int drawableRes) {
            View view = getView(id);
            if(view instanceof ImageView) {
                ((ImageView) view).setImageResource(drawableRes);
            } else {
                view.setBackgroundResource(drawableRes);
            }
            return this;
        }
        /**
         * 设置点击监听
         */
        public ViewHolder setOnClickListener(int id, View.OnClickListener listener) {
            getView(id).setOnClickListener(listener);
            return this;
        }
        /**
         * 设置可见
         */
        public ViewHolder setVisibility(int id, int visible) {
            getView(id).setVisibility(visible);
            return this;
        }
        /**
         * 设置标签
         */
        public ViewHolder setTag(int id, Object obj) {
            getView(id).setTag(obj);
            return this;
        }
    }
    /**
     * 增加元素
     * */
    public void add(T data){
        if (mData==null){
            mData= new ArrayList <> (  );
        }
        mData.add ( data );
        notifyDataSetChanged ();
    }
    /**
     * 往指定位置添加元素
     * */
    public void add(int position,T data){
        if (mData==null){
            mData= new ArrayList <> (  );
        }
        mData.add ( position,data );
        notifyDataSetChanged ();
    }
    /**
     * 删除元素
     * */
    public void delete(T data){
        if (mData!=null) {
            mData.remove ( data );
        }
        notifyDataSetChanged ();
    }
    /**
     * 删除指定位置的元素
     * */
    public void delete(int position){
        if (mData!=null) {
            mData.remove ( position );
        }
        notifyDataSetChanged ();
    }
    /**
     * 删除所有元素
     * */
    public void clear(){
        if (mData!=null) {
            mData.clear ( );
        }
        notifyDataSetChanged ();
    }

}

使用时,定义好需要传输的数据型,然后将数据传递到需要适配的数据list,定义listview之后,直接new 一个适配器,重写抽象方法bindView,new Adapter时,第一个参数为数据list,第二个参数为自定义的listview的item,然后在bindview中进行内容获取并设置。再将layout中的listview找到并进行内容适配即可。
ps:内容为空时,可在layout中设置内容为空时的显示textview,在数据为空时显示。代码如下~

//设置内容为空时的显示内容
        TextView textempty = findViewById ( R.id.textempty );
        textempty.setText ( "您浏览的内容为空~" );
        listView.setEmptyView ( textempty );
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RecyclerView的适配器Adapter需要继承自RecyclerView.Adapter类,然后实现三个方法:onCreateViewHolder()、onBindViewHolder()和getItemCount()。 1. onCreateViewHolder()方法:创建ViewHolder对象,ViewHolder用于保存item的视图组件,包括TextView、ImageView等。 2. onBindViewHolder()方法:将数据绑定到ViewHolder上,即填充RecyclerView中每一项item的数据。 3. getItemCount()方法:返回数据的数量。 以下是一个简单的RecyclerView的适配器Adapter的代码示例: ```java public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private List<String> mData; public MyAdapter(List<String> data) { mData = data; } // 创建视图组件并返回一个ViewHolder对象 @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false); ViewHolder holder = new ViewHolder(view); return holder; } // 将数据绑定到ViewHolder上,即填充RecyclerView中每一项item的数据 @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.mTextView.setText(mData.get(position)); } // 返回数据的数量 @Override public int getItemCount() { return mData.size(); } // 自定义ViewHolder类,用于保存item的视图组件 static class ViewHolder extends RecyclerView.ViewHolder { TextView mTextView; public ViewHolder(View itemView) { super(itemView); mTextView = (TextView) itemView.findViewById(R.id.textview); } } } ``` 在上面的代码中,我们使用了一个ViewHolder类来保存RecyclerView中每一项item的视图组件,这样可以避免每次都使用findViewById()方法来查找视图组件,从而提升性能。在onBindViewHolder()方法中,我们将数据绑定到ViewHolder上,即填充RecyclerView中每一项item的数据。在getItemCount()方法中,我们返回数据的数量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值