ListView 实现分组
1:FragmentHack4.java
/**
* Created by y on 15-1-2.
*/
public class FragmentHack4 extends Fragment{ View view;
List<String> names; ListView lvNames;
NameSectionAdapter adapter;
TextView tvHeader;
int topVisiblePos; @Override
public void onAttach(Activity activity) {
super.onAttach(activity); names = new ArrayList<String>(); //测试数据
String []t={"A","B","C","D","E","F"};
for(int i=0;i<t.length;i++){
for(int j=0;j<10;j++){
names.add(t[i]+"00"+j);
}
} } @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_hack4, container,false); tvHeader = (TextView)view.findViewById(R.id.tvHeader);
lvNames = (ListView)view.findViewById(R.id.lvNames); adapter = new NameSectionAdapter(getActivity(),R.layout.list_name_item,names);
lvNames.setAdapter(adapter); //设置第一个分组栏数据
setTopHeader(0); lvNames.setOnScrollListener( lvOnScrollListener()); return view;
} AbsListView.OnScrollListener lvOnScrollListener(){
return new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView absListView, int i) { } @Override
public void onScroll(AbsListView absListView, int i, int i2, int i3) { if(i!=topVisiblePos){ topVisiblePos = i; setTopHeader(i);
}
}
};
} private void setTopHeader(int pos){
tvHeader.setText(names.get(pos).substring(0,1));
}
}
2:NameSectionAdapter.java
/**
* Created by y on 15-1-2.
*/
public class NameSectionAdapter extends ArrayAdapter<String>{
private int resourceId; public NameSectionAdapter(Context context, int resourceId, List<String> objects){
super(context,resourceId,objects); this.resourceId = resourceId;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
String name = getItem(position);
ViewHolder holder; if(convertView==null){
convertView = LayoutInflater.from(getContext()).inflate(resourceId,null);
holder = new ViewHolder(); holder.tvHeader = (TextView)convertView.findViewById(R.id.tvHeader);
holder.tvName = (TextView)convertView.findViewById(R.id.tvName); convertView.setTag(holder);
}else{
holder = (ViewHolder)convertView.getTag();
} holder.tvName.setText(name); //如果是第一项或者首字母发生了变化,则显示分组栏,否则隐藏
if(position==0 || getItem(position-1).charAt(0)!=name.charAt(0)){
holder.tvHeader.setVisibility(View.VISIBLE);
holder.tvHeader.setText(name.substring(0,1));
}else{
holder.tvHeader.setVisibility(View.GONE);
} return convertView;
} static class ViewHolder{
public TextView tvHeader;
public TextView tvName;
}
}
3:布局文件:
(1)fragment_hack4.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"> <ListView
android:id="@+id/lvNames"
android:layout_width="match_parent"
android:layout_height="match_parent"/> <include layout="@layout/list_header"/>
</FrameLayout>
(2)list_header.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tvHeader"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#0000ff"
android:textColor="#ffffff"
style="@android:style/TextAppearance.Large"
android:textStyle="bold"/>
(3)list_name_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"> <include layout="@layout/list_header"/> <TextView
android:id="@+id/tvName"
style="@android:style/TextAppearance.Small"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
4:运行结果
ListView 实现分组的更多相关文章
- WPF,ListView设置分组
原文:WPF,ListView设置分组 今天遇到一个问题,就是在ListView中设置分组.想了很久在网上早了些资料作出一个例子. 分组字段也可以在后台中定义: CollectionView view ...
- Android 开源库StickyListHeadersListView来实现ListView列表分组效果
项目中有一新的需求,要求能像一些Android机带"联系人列表"一样,数据可以自动分组,且在列表滑动过程中,列表头固定在顶部,效果图如下: 下面就带大家实现上面的效果, 首先,我们 ...
- xamarin android ListView手动分组
xamarin的listview控件其实自带有分组方法,关于xamarin listview的自带分组方法请自行参考官方文档,我这里只写自己写的分组方法.xamarin自带的分组好是好,功能多,但是加 ...
- Xamarin使用ListView开启分组视图Cell数据展示bug处理
问题描述 Xamarin使用IsGroupingEnabled="true"之后再Cell操作就会出现数据展示bug,数据不刷新的问题,如下图所示: 点击取消的是其他钢厂,但Vie ...
- FastScroll(3)分组的listview 打开fastscroll的分组提示功能
1,让ListView显示分组(用两个layout) 2,让ListView实现sectionIndexer接口 3,代码如下: import java.util.ArrayList; import ...
- React Native之ListView使用
前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...
- React Native的组件ListView
React Native的组件ListView类似于iOS中的UITableView和UICollectionView,也就是说React Native的组件ListView既可以实现UITableV ...
- React-Native 之 ListView使用
前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...
- WinUI 3学习笔记(2)—— 用ListView来展示集合
在WPF的时代,我们多是使用ListBox和ListView来展示,纵向滚动条显示的集合数据.这两个控件的默认样式,以及对触控的支持,已完全落后于时代.他们两个分别长这样,和Win10及Win11的风 ...
随机推荐
- 树莓派入门教程——使用Qt开发界面程序
前言 Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器.Qt是面向对象的框架,使用特 ...
- 10g中注意谓词过滤的位置
在10g中当主查询的谓词信息,被错误的放入子查询中,会导致子查询无法展开 explain plan for UPDATE DWF.F_PTY_INDIV O SET END_DT = TO_DATE( ...
- bzoj1786
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1786 刚看上去觉得挺吓人的...... 冥冥之中我的内心深处告诉我填进去的数一定是非严格递增的 ...
- ZZY的宠物
Description ZZY领养了一对刚刚出生的不知名小宠物..巨萌巨可爱!!...小宠物的生命为5个单位时间并且不会在中间出意外翘辫子(如: 从0出生能活到5但活不到6)..小宠物经过2个单位时间 ...
- sicily 1007 To and Fro
题意:字符串的操作处理 // Problem#: 8768 // Submission#: 2606406 // The source code is licensed under Creative ...
- PyQt实现图片中心旋转
# -*- coding: cp936 -*- from PyQt4 import QtCore, QtGui, Qt class RotatePage(QtGui.QFrame): def __in ...
- px 和 em换算
常用px,pt,em换算表 pt (point,磅):是一个物理长度单位,指的是72分之一英寸. px (pixel,像素):是一个虚拟长度单位,是计算机系统的数字化图像长度单位,如果px要换算成物理 ...
- vue-cli 脚手架总结
> vue-cli 的脚手架项目模板有browserify 和 webpack , 现在自己在用的是webpack , 官网给出了两个模板: webpack-simple 和 webpack 两 ...
- c++11 之 decltype
在C++中,decltype作为操作符,用于查询表达式的数据类型.decltype在C++11标准制定时引入,主要是为泛型编程而设计,以解决泛型编程中,由于有些类型由模板参数决定,而难以(甚至不可能) ...
- QT正则表达式---针对IP地址
判断合法IP的QT正则表达式: bool IsIPaddress(QString ip) { QRegExp rx2("(//d+)(//.)(//d+)(//.)(//d+)(//.)(/ ...