您的位置:首页 > 移动开发 > Android开发

Android - 滚动ListView的适配器

2015-07-30 21:00 645 查看
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());
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息