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的风 ...
随机推荐
- Android扩展 - 拍照篇(Camera)
1.调用系统摄像头 1.声明常量和变量 2.按钮点击事件,打开系统摄像头 3.重写onActivityResult事件接收拍照返回 4.生成文件名返回路径 5.保存图片 private static ...
- hdu Examining the Rooms
这道题的知识点第一次听说 ,就是应用斯特林数.题目的意思是给你房间数N,和最多能破门的个数,让你求能全部把房间打开的概率! a[i][j]=a[i-1][j-1]+(i-1)*a[i-1][j]; # ...
- NGINX和PHP之间的环境变量传递
昨天遇到的,想将IP访问转换成域名访问.则NGINX需要将相关的变量转换后传递给PHP. 网上有一系统的方法: 前面讲过该不该把信息写在服务器配置文件里?.通过php扩展hidef来define常量, ...
- http://wiki.apache.org/tomcat/HowTo
http://wiki.apache.org/tomcat/HowTo Contents Meta How do I add a question to this page? How do I con ...
- bzoj1624 [Usaco2008 Open] Clear And Present Danger 寻宝之路
Description 农夫约翰正驾驶一条小艇在牛勒比海上航行. 海上有N(1≤N≤100)个岛屿,用1到N编号.约翰从1号小岛出发,最后到达N号小岛.一 张藏宝图上说,如果他的路程上 ...
- Centos 添加Root用户
今天,我要描述的是如何在Centos Linux 系统中建立一个和Root账户等权限的用户账户.废话不多说,开始列出必要的操作. 1:首先,我们使用以下命令 进行用户的创建 和 用户密码的初始化. # ...
- pyglet: a cross-platform windowing and multimedia
pyglet pyglet: a cross-platform windowing and multimedia library for Python.
- hdu 3722
单词间形成环,求最大值,,KM,,,,, #include<stdio.h> #include<string.h> #define N 210 #define inf 0x3f ...
- CF Zepto Code Rush 2014 B. Om Nom and Spiders
Om Nom and Spiders time limit per test 3 seconds memory limit per test 256 megabytes input standard ...
- [manacher] hdu 3294 Girls' research
题意: 给一个字符x代表真实的a 然后输出的时候转换 然后就是求最长回文子串的串是什么 长度要大于1 思路: 就是裸的manacher,弄清楚下标的转换关系就好了 代码: #include" ...