自定义SectionAdapter显示数据
2015-12-09 16:41
369 查看
转载请注明转自:noyet12的博客
博客原址:http://blog.csdn.net/u012975705/article/details/50238269
源码下载csdn
源码下载github
博客原址:http://blog.csdn.net/u012975705/article/details/50238269
源码下载csdn
源码下载github
前言
之前在项目中需要在一个ScrollView中显示2个不同类型的列表,因为就2个列表,所以偷了下懒:直接使用的2个ListView来显示。写完之后怎么看怎么别扭,今天抽空学习写了个SectionAdapter,mark下。实现效果
主要代码
package com.noyet.zzj.sectionadapterdemo; import android.content.Context; import android.util.SparseArray; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; /** * package: com.noyet.zzj.sectionadapterdemo * Created by noyet on 2015/12/9. */ public class SectionAdapter extends SectionBaseAdapter<SectionItem> { public SectionAdapter(Context context, SparseArray<SectionItem> mSectionItems) { super(context, mSectionItems); } @Override public int getItemViewType(int position) { int titlePos = 0; for (int i = 0; i < mTypeCount; i++) { SectionItem sectionItem = getItemSection(titlePos); int size = sectionItem.getCount() + 1; if (position < size) { return position; } position -= size; titlePos++; } return -1; } @Override public int getViewTypeCount() { return mTypeCount; } @Override public int getCount() { int total = 0; for (int i = 0; i < mTypeCount; i++) { total += getItemSection(i).getCount() + 1; } return total; } @Override public Object getItem(int position) { int titlePos = 0; for (int i = 0; i < mTypeCount; i++) { SectionItem sectionItem = getItemSection(titlePos); int size = sectionItem.getCount() + 1; if (position < size) { return sectionItem; } position -= size; titlePos++; } return null; } @Override public long getItemId(int position) { return (long) position; } @Override public View getView(int position, View convertView, ViewGroup parent) { SectionItem item = (SectionItem) getItem(position); int itemPos = getItemViewType(position); ViewHolder holder; if (itemPos == TYPE_SECTION_HEADER) { if (convertView == null) { convertView = mInflater.inflate(R.layout.item_title_section, null); holder = new ViewHolder(); holder.textView = (TextView) convertView.findViewById(R.id.text_title); holder.imageView = (ImageView) convertView.findViewById(R.id.text_title_iv); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.imageView.setImageResource(android.R.drawable.ic_dialog_dialer); holder.textView.setText(item.getTitle()); return convertView; } else { if (convertView == null) { convertView = mInflater.inflate(R.layout.item_content_section, null); holder = new ViewHolder(); holder.textView = (TextView) convertView.findViewById(R.id.text_content); convertView.setTag(R.id.tag_data, holder); } else { holder = (ViewHolder) convertView.getTag(R.id.tag_data); } String content = item.getItem(itemPos - 1).toString(); holder.textView.setText(content); convertView.setTag(R.id.tag_id, content); convertView.setOnClickListener(listener); return convertView; } } private View.OnClickListener listener = new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(mContext, (String) v.getTag(R.id.tag_id), Toast.LENGTH_SHORT).show(); } }; static class ViewHolder { TextView textView; ImageView imageView; } }
package com.noyet.zzj.sectionadapterdemo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.SparseArray; import android.widget.ListView; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private SectionAdapter mAdapter; private SparseArray<SectionItem> mSectionItems; private List<String> list; private ListView mListView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mListView = (ListView) findViewById(R.id.list_view); mSectionItems = new SparseArray<>(); list = new ArrayList<>(); list.add("like me 1"); list.add("like me 2"); list.add("like me 3"); for (int i = 0; i < 10; i++) { SectionItem<String> sectionItem = new SectionItem<>(this, "title" + i, list); mSectionItems.put(i, sectionItem); } mAdapter = new SectionAdapter(this, mSectionItems); mListView.setAdapter(mAdapter); } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories