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的风 ...
随机推荐
- cocos2d-x Loading界面实现资源加载
有时候场景中的资源加载过多的话就会引起游戏进入的时候很卡,因为那是边加载边显示.在tests例子里面有一个很好的例子叫做TextureCacheTest,里面讲解了如何写loading. #inclu ...
- java开发经验分享(二)
二. 数据库 1. SQL语句中保留字.函数名要大写,表明.字段名全部小写 如:SELECT vc_name,vc_sex,i_age FROM user WHERE i_id = 100 AND i ...
- bzoj2929 [Poi1999]洞穴攀行
Description 一队洞穴学者在Byte Mountain的Grate Cave里组织了一次训练.训练中,每一位洞穴学者要从最高的一个室到达最底下的一个室.他们只能向下走.一条路上每一个连续的室 ...
- wikioi1082【线段树练习 3 】
题目描述 Description 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[a,b]的数的和. 输入描述 Input Description 第一行一个正整数n,接下 ...
- 简单计算器(Android)
aaarticlea/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKC
- puppet证书重申
- Go--包引用介绍
最近在学习Go编程,本文简单的叙述如何在Go编程中使用包(包管理). 和其他大多数语言一样,Go也存在包,并使用package关键字定义一个包.首先介绍在程序中如何引入包,引入包有以下几种方式: 1. ...
- Annotation(三)——Spring注解开发
Spring框架的核心功能IoC(Inversion of Control),也就是通过Spring容器进行对象的管理,以及对象之间组合关系的映射.通常情况下我们会在xml配置文件中进行action, ...
- Android 之 Shape (圆角输入框)
1 简介 本文主要介绍通过 shape 来设置 EditText 的圆角. 2 shape 的设置 shape_life_search.xml 放在 res/drawable 文件夹内 < ...
- 再看ADO对象模型
在敲学生管理系统之前,我们就学习过ADO的有关知识.但是昨天被问到ADO的几个对象,顿时无言!为什么会出现这样的结果呢,明明是学习过了,而且也实践过(红皮书的五个例子).这充分说明了,在以往的学习过程 ...