Android - 滚动ListView的适配器

IndexScrollerAdapter是滚动ListView的适配器. 继承G7BaseAdapter, 并重载viewForObject()函数, 实现根据不同的Object, 使用不同的ViewHolder.

package me.chunyu.widget.widget;

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

import java.io.Serializable;

import me.chunyu.G7Annotation.Adapter.G7BaseAdapter;
import me.chunyu.G7Annotation.Adapter.G7ViewHolder;
import me.chunyu.G7Annotation.Annotation.ViewBinding;
import me.chunyu.G7Annotation.Utils.ViewBinder;
import me.chunyu.widget.R;

/** * 索引的适配器, 药品库的首字母快速滑动. * 通过字母和数据项的两个ViewHolder进行绑定. * 参考: {@link me.chunyu.widget.widget.IndexScroller} * <p/> * Created by C.L.Wang on 15/7/30. */

public class IndexScrollerAdapter extends G7BaseAdapter {

    private final Context mContext;

    public IndexScrollerAdapter(Context context) {
        super(context);
        mContext = context;
    }

    /** * 把数据填充到页面, 区分标题和数据, 使用不同的ViewHolder绑定. * * @param object 填充数据 * @param convertView 页面 * @param viewGroup 视图组 * @return 填充的页面 */
    @Override
    public View viewForObject(Object object, View convertView, ViewGroup viewGroup) {

        GroupTitleViewHolder groupTitleViewHolder; // 标题
        KnowledgeItemViewHolder knowledgeItemViewHolder; // 数据

        // 标题
        if (object instanceof GroupTitle) {
            if (null == convertView) {
                groupTitleViewHolder = new GroupTitleViewHolder();
                convertView = ((LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE))
                        .inflate(groupTitleViewHolder.getViewLayout((GroupTitle) object), viewGroup, false);
                ViewBinder.bindView(convertView, groupTitleViewHolder);
                convertView.setTag(R.id.tag_first, groupTitleViewHolder);

                convertView.setBackgroundResource(R.drawable.list_header_background); // 重载背景颜色
            } else {
                groupTitleViewHolder = (GroupTitleViewHolder) convertView.getTag(R.id.tag_first);
            }
            groupTitleViewHolder.setData(mContext, (GroupTitle) object);
        }

        // 数据
        if (object instanceof HealthItem) {
            if (null == convertView) {
                knowledgeItemViewHolder = new KnowledgeItemViewHolder();
                convertView = ((LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE))
                        .inflate(knowledgeItemViewHolder.getViewLayout((HealthItem) object), viewGroup, false);
                ViewBinder.bindView(convertView, knowledgeItemViewHolder);
                convertView.setTag(R.id.tag_first, knowledgeItemViewHolder);
            } else {
                knowledgeItemViewHolder = (KnowledgeItemViewHolder) convertView.getTag(R.id.tag_first);
            }
            knowledgeItemViewHolder.setData(mContext, (HealthItem) object);
        }

        return convertView;
    }

    // 单项 - 名称+首字母
    @SuppressWarnings("unused")
    public static class HealthItem implements Serializable {

        private String name; // 标题

        private String capital; // 首字母

        private int nameOrder;

        public HealthItem(String name, String capital, int nameOrder) {
            this.name = name.trim();
            this.capital = capital.trim();
            this.nameOrder = nameOrder;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getCapital() {
            return capital;
        }

        public void setCapital(String capital) {
            this.capital = capital;
        }

        public int getNameOrder() {
            return nameOrder;
        }

        public void setNameOrder(int nameOrder) {
            this.nameOrder = nameOrder;
        }
    }

    // 单项
    public static class KnowledgeItemViewHolder extends G7ViewHolder<HealthItem> {

        @SuppressWarnings("unused")
        @ViewBinding(idStr = "cell_symptoms_list")
        private TextView mTextView;

        @Override
        public int getViewLayout(HealthItem myDocInfo) {
            return R.layout.cell_symptoms_list;
        }

        @Override
        protected void setData(final Context context, final HealthItem data) {
            mTextView.setText(data.getName());
        }
    }

    // 标题项
    public static class GroupTitleViewHolder extends G7ViewHolder<GroupTitle> {

        @SuppressWarnings("unused")
        @ViewBinding(idStr = "group_title")
        private TextView text;

        @Override
        public int getViewLayout(GroupTitle title) {
            return R.layout.list_group_title;
        }

        @Override
        protected void setData(final Context context, final GroupTitle data) {
            text.setText(data.getTitle());
        }
    }

}

你可能感兴趣的:(android,Adapter,适配器,Mystra,滚动ListView)