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的风 ...
随机推荐
- 通过JCONSOLE监控TOMCAT的JVM使用情况
这个也是要学入一下,JVMr 虚拟机原理不可少. 参考配置URL“: http://blog.163.com/kangle0925@126/blog/static/277581982011527723 ...
- 这样就算会了PHP么?-5
汇集一点关于数据深入一些的几个函数,去重,弹出,加入,查找.... <?php $str = "时装,休闲,职业装"; $strs = explode(",&quo ...
- 单线程Singleton模式的几个要点
1.Singleton模式中的实例构造器可以设置为protected以允许子类派生.2.Singleton模式一般不要支持ICIoneable接口,因为这可能会导致多个对象实例,与Singleton模 ...
- 微软开源PowerShell并支持Linux和OS X
[微软在开源的道路上加速度了] 从一开始的各种对抗,各种通吃,到现在开始做服务,包罗万象.果然,换了主力,大有不同. 微软今天还宣布开源其.NET框架,令.NET Core能在Linux和OS X上运 ...
- 【转】Win7系统下安装Ubuntu12.04(EasyBCD硬盘安装)--不错
原文网址:http://blog.csdn.net/lengbuleng1107/article/details/14532177 需要的东西有: 1,ubuntu系统镜像,下载地址:http://w ...
- Linux中部署JAVA程序
JAVA程序在开发完成后,需要部署到服务器,如果是WEB项目,需要部署到WEB服务器,否则部署到应用服务器. JAVA是跨平台的编程语言,服务器的操作系统可以是Windows.Linux或者其它,下面 ...
- C# - 创建List属性的简单方法
不用担心List没有创建问题. private ObservableCollection<EquipmentItem> _optionalCollection; public Observ ...
- java常用方法
public static int byte2int(byte b) { int i = b & 0x07f; if (b < 0) { i |= 0x80; } return i; } ...
- python之模块:decimal
# -*- coding: utf-8 -*-__author__ = 'Administrator'#数学计算import decimal#用于定点和浮点运算#文档:https://docs.pyt ...
- 左侧高亮(js)
//左导航高亮 (function(){ var leftnav = $('#leftnav'); //左侧ul var pi = __preset.curpathid; if(pi=='/acco ...