FastScroll(3)分组的listview 打开fastscroll的分组提示功能

1,让ListView显示分组(用两个layout)
2,让ListView实现sectionIndexer接口
3,代码如下:
import java.util.ArrayList; import com.example.fastscroll.R; import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.SectionIndexer;
import android.widget.TextView; public class GroupsFastScrollAdapter extends BaseAdapter implements SectionIndexer{ Context context;
LayoutInflater inflater; /*
* 保存当前section的第一条记录的Position
* Character是section,Integer是section对应的第一条数据的position
*/
/*
* 保存每个section的第一条数据的position
* firstPositions的下标 firstPositions的值
* 0 0
* 1 2
* 2 4
* 3 6
*/ Integer firstPositions[]; /* 用空间代时间,把数据中的每个position对应的section index存下来
* 如:
* sectionIndexes的下标 sectionIndexes数组中的值(section的下标)
* 0 0
* 1 0
* 2 1
* 3 1
* 4 2
* 5 2
* 6 3
* ... ...
*/
int sectionIndexes[];//保存每个position对应的section index Character sections[]; /*private String countries[]= {
"A",
"Afghanistan", "Albania", "Algeria", "American Samoa",
"Andorra", "Angola", "Anguilla", "Antarctica",
"Antigua and Barbuda", "Argentina", "Armenia", "Aruba",
"Australia", "Austria", "Azerbaijan",
"B",
"Bahrain", "Bangladesh","Barbados", "Belarus", "Belgium",
"Belize", "Benin", "Bermuda","Bhutan", "Bolivia",
"Bosnia and Herzegovina", "Botswana","Bouvet Island",
"Brazil", "British Indian Ocean Territory","British Virgin Islands",
"Brunei", "Bulgaria", "Burkina Faso","Burundi",
"C",
"Cote d'Ivoire", "Cambodia", "Cameroon", "Canada","Cape Verde",
"Cayman Islands", "Central African Republic", "Chad",
"Chile", "China", "Christmas Island", "Cocos (Keeling) Islands",
"Colombia", "Comoros", "Congo", "Cook Islands", "Costa Rica",
"Croatia", "Cuba", "Cyprus", "Czech Republic",
"D",
"Democratic Republic of the Congo", "Denmark", "Djibouti",
"Dominica", "Dominican Republic",
"E",
"East Timor", "Ecuador", "Egypt",
"El Salvador", "Equatorial Guinea", "Eritrea", "Estonia","Ethiopia",
"F",
"Faeroe Islands", "Falkland Islands", "Fiji",
"Finland", "Former Yugoslav Republic of Macedonia", "France",
"French Guiana", "French Polynesia", "French Southern Territories",
"G",
"Gabon", "Georgia", "Germany", "Ghana", "Gibraltar", "Greece",
"Greenland", "Grenada", "Guadeloupe", "Guam", "Guatemala",
"Guinea", "Guinea-Bissau", "Guyana",
"H",
"Haiti","Heard Island and McDonald Islands", "Honduras", "Hong Kong","Hungary",
"I",
"Iceland", "India", "Indonesia", "Iran", "Iraq","Ireland", "Israel","Italy",
"J",
"Jamaica", "Japan", "Jordan",
"K",
"Kazakhstan", "Kenya", "Kiribati", "Kuwait", "Kyrgyzstan",
"L",
"Laos","Latvia", "Lebanon", "Lesotho", "Liberia", "Libya",
"Liechtenstein", "Lithuania", "Luxembourg",
"M",
"Macau", "Madagascar","Malawi", "Malaysia", "Maldives", "Mali", "Malta",
"Marshall Islands", "Martinique", "Mauritania", "Mauritius",
"Mayotte", "Mexico", "Micronesia", "Moldova", "Monaco", "Mongolia",
"Montserrat", "Morocco", "Mozambique", "Myanmar",
"N",
"Namibia","Nauru", "Nepal", "Netherlands", "Netherlands Antilles",
"New Caledonia", "New Zealand", "Nicaragua", "Niger", "Nigeria",
"Niue", "Norfolk Island", "North Korea", "Northern Marianas",
"Norway",
"O",
"Oman",
"P",
"Pakistan", "Palau", "Panama",
"Papua New Guinea", "Paraguay", "Peru", "Philippines",
"Pitcairn Islands", "Poland", "Portugal", "Puerto Rico",
"Q",
"Qatar",
"R",
"Reunion", "Romania", "Russia", "Rwanda",
"S",
"Sqo Tome and Principe",
"Saint Helena", "Saint Kitts and Nevis", "Saint Lucia",
"Saint Pierre and Miquelon", "Saint Vincent and the Grenadines",
"Samoa", "San Marino", "Saudi Arabia", "Senegal", "Seychelles",
"Sierra Leone", "Singapore", "Slovakia", "Slovenia",
"Solomon Islands", "Somalia", "South Africa",
"South Georgia and the South Sandwich Islands", "South Korea",
"Spain", "Sri Lanka", "Sudan", "Suriname",
"Svalbard and Jan Mayen", "Swaziland", "Sweden", "Switzerland","Syria",
"T",
"Taiwan", "Tajikistan", "Tanzania", "Thailand",
"The Bahamas", "The Gambia", "Togo", "Tokelau", "Tonga",
"Trinidad and Tobago", "Tunisia", "Turkey", "Turkmenistan",
"Turks and Caicos Islands", "Tuvalu",
"U",
"Uganda","Ukraine", "United Arab Emirates", "United Kingdom",
"United States", "United States Minor Outlying Islands", "Uruguay","Uzbekistan",
"V",
"Vanuatu", "Vatican City", "Venezuela", "Vietnam", "Virgin Islands",
"W",
"Wallis and Futuna", "Western Sahara",
"Y",
"Yemen", "Yugoslavia",
"Z",
"Zambia", "Zimbabwe" };
*/
private String countries[]= {
"A",
"啊有", "啊有2", "啊1有",
"啊有3", "爱有3", "爱有4", "暗3","暗32",
"B",
"把工和1", "把工2和","把1工和", "把工2和", "把工4和",
"白2为", "冰的","冰的2", "冰的3","布是","部公","爸五","兵妥",
"兵妥2","兵妥3","兵妥4",
"C",
"草莓", "参数", "次国粗", "操类1", "操类2", "操类3", "操类4", "操类5", "操类6",
"操类7","粗3","粗33","粗34","粗35","粗36",
"D",
"吊炮","灯具","都产遥","顶为","大有","端人在","电中工","到这要","当遥1",
"当遥2","当遥3","当遥4","当遥5"
};
void initSections(){
//假设countries已经排序,本例中确实已经排序
//把section对应的第一条数据的position存下来
ArrayList<Integer> tmpFirstPositions = new ArrayList<Integer>();
ArrayList<Character> tmpSections = new ArrayList<Character>();
sectionIndexes = new int[countries.length];
char lastChar = '\0';
int index = -;
for (int i = ; i < countries.length; i++) {
String country = countries[i];
char ch = country.charAt();
if (ch != lastChar) {
//只存第一条数据的position,其它的跳过。
tmpSections.add(ch);//增加一个section
tmpFirstPositions.add(i);//增加该section的第一条记录的位置
++index;
}
lastChar = ch;
sectionIndexes[i] = index;
}
sections = new Character[tmpSections.size()];
tmpSections.toArray(sections); firstPositions = new Integer[tmpFirstPositions.size()];
tmpFirstPositions.toArray(firstPositions);
} public GroupsFastScrollAdapter(Context ctxt){
context = ctxt;
inflater = LayoutInflater.from(context);
initSections();
} @Override
public int getCount() {
return countries.length;
} @Override
public Object getItem(int position) {
return countries[position];
} @Override
public int getItemViewType(int position) {
if (countries[position].length() == ) {
return ;
}
return ;
} @Override
public int getViewTypeCount() {
return ;
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) { if (getItemViewType(position) == ) {//group
if(convertView == null){
convertView = inflater.inflate(android.R.layout.simple_list_item_1, parent,false);
}
convertView.setBackgroundColor(Color.parseColor("#C9C9C9"));
TextView group = (TextView) convertView.findViewById(android.R.id.text1);
group.setText(countries[position]);
ViewGroup.LayoutParams param = convertView.getLayoutParams();
// param.height = ViewGroup.LayoutParams.WRAP_CONTENT;
param.height = ; }else{
if(convertView == null){
convertView = inflater.inflate(R.layout.list_item_custom_fs, parent,false);
}
TextView tv = (TextView) convertView.findViewById(R.id.tv_content);
tv.setText(countries[position]);
}
return convertView;
} @Override
public Object[] getSections() {
return sections;
} @Override
public int getPositionForSection(int sectionIndex) {
sectionIndex %= sections.length;
return firstPositions[sectionIndex];
} @Override
public int getSectionForPosition(int position) {
return sectionIndexes[position];
}
}
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView; import com.example.fastscroll.R; public class GroupsFastScrollFrgmt extends Fragment {
ListView listview;
GroupsFastScrollAdapter adapter; @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.frgmt_groups_and_fastscroll, container,false);
listview = (ListView) v.findViewById(R.id.list_groups_fs); adapter = new GroupsFastScrollAdapter(getActivity());
listview.setAdapter(adapter);
return v;
}
}
<?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="match_parent"
android:orientation="vertical" > <ListView
android:id="@+id/list_groups_fs"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fastScrollEnabled="true"
>
</ListView> </LinearLayout>
fastscroll的样式
<style name="CustomFastScrollTheme" parent="AppBaseTheme">
<!-- api21 -->
<!-- <item name="android:fastScrollStyle">@style/CustomFastScrollTheme</item> --> <item name="android:fastScrollThumbDrawable">@drawable/fastscroll_thumb_aje</item>
<item name="android:fastScrollOverlayPosition">atThumb</item>
<item name="android:fastScrollTextColor">#DA4A38</item>
<!-- <item name="android:fastScrollTrackDrawable">@drawable/us</item> -->
<item name="android:fastScrollPreviewBackgroundRight">@drawable/fastscroll_preview_right</item>
</style>
FastScroll(3)分组的listview 打开fastscroll的分组提示功能的更多相关文章
- FastScroll(2)不分组的listview 打开fastscroll的分组提示功能
本文只让fastscroll具有提示分组功能,但listview并不显示分组,如果想让分组的listview显示fastscroll,看下篇. 1,在listview中打开fastscroll 2,自 ...
- FastScroll(1)ListView打开FastScroll及自定义它的样式
打开 FastScroll 方式 android:fastScrollEnabled="true" 它是AbsListView的属性. <?xml version=" ...
- 打开程序总是会提示“Enter password to unlock your login keyring” ,如何成功关掉?
p { margin-bottom: 0.1in; line-height: 120% } 一.一开始我是按照网友所说的 : rm -f ~/.gnome2/keyrings/login.keyrin ...
- 微信扫描打开APP下载链接提示代码优化
上一次我发了一篇文章叫“微信打开网址添加在浏览器中打开提示”,里面我发出来了三个代码,分别是纯JS.js+html.jQuery+HTML代码.今天来一个简化版带可以关闭的按钮操作.使用的是纯JS+H ...
- 微信扫描打开APP下载链接提示代码优化(转)
上一次我发了一篇文章叫“微信打开网址添加在浏览器中打开提示”,里面我发出来了三个代码,分别是纯JS.js+html.jQuery+HTML代码.今天来一个简化版带可以关闭的按钮操作.使用的是纯JS+H ...
- 打开mysql时,提示 1040,Too many connections
打开mysql时,提示 1040,Too many connections,这样就无法打开数据库,看不了表里边的内容了. 出现这个问题的原因是,同时对数据库的连接数过大,mysql默认的最大连接数是1 ...
- [WPF]ListView点击列头排序功能实现
[转] [WPF]ListView点击列头排序功能实现 这是一个非常常见的功能,要求也很简单,在Column Header上显示一个小三角表示表示现在是在哪个Header上的正序还是倒序就可以了. ...
- Geany 编辑器打开 高亮所选单词 功能
Geany 编辑器打开 高亮所选单词 功能 在Ubuntu 系统的Software Center 工具中,搜索到geany, 下方有个 Miscellanous Plugins for Geany, ...
- 如何打开Intellij IDEA的代码提示功能/联想/自动联想
1.默认情况下,我们输入代码时IDEA会自动弹出代码提示框,这时候是不用按快捷键的,直接使用方向键选择我们需要的条目就可以了. 2:如果我们想主动 使用代码提示时,默认的快捷键是CTRL+空格,但是中 ...
随机推荐
- xtraScrollableControl 滚动条随鼠标滚动
代码如下 // using System; using System.Windows.Forms; using DevExpress.XtraEditors; namespace WindowsFor ...
- [ Web Service ] [ SOAP ] [ JSON ] [ XML ] 格式轉換
JSON格式產生器_Demo JSON格式產生器_ObjGen - Live JSON Generator JSON格式整理_JSON Formatter & Validator Online ...
- Delphi代码优化
文章编目 1. 字符串优化 1.1. 不重复初始化 1.2. 使用SetLength预分配长字符串(AnsiString) 1.3. 字符串与动态数组的线程安全(Thread Safety) 1.4. ...
- Oracle SGA参数调整
一. SGA的组成: 自动 SGA 管理后,Oracle 可以自动为我们调整以下内存池的大小: shared pool buffer cache large pool java pool stream ...
- C++数据类型总结
关键字:C++, 数据类型, VS2015. OS:Windows 10. ANSI C/C++基本数据类型: Type Size 数值范围 无值型void 0 byte 无值域 布尔型bool 1 ...
- 《WPF程序设计指南》读书笔记——第9章 路由输入事件
1.使用路由事件 路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件.通俗地说,路由事件会在可视树(逻辑树是其子集)上,上下routed,如果哪个节点上订阅了 ...
- iframe 刷新
iframe刷新父页面 parent.location.reload(); iframe 一个子页面操作过后,刷新指定子页面 parent.frames('ifrmname').location.re ...
- easy ui 表单元素input控件后面加说明(红色)
<%-- 上传图片到图库基本信息且将图片关联到图集 开始--%> <div id="win_AddPicLib" class="easyui-windo ...
- UI事件监听的击穿
什么是UI事件监听的击穿 在游戏视图中,有两个UI界面叠在一起的时候,单击一个空白处,却触发了被覆盖在下层了UI界面中的单击事件,这就是单击击穿了上层界面. 假设场景中放置了一个箱子,单击箱子会触发一 ...
- 使用 Android Studio 跑新浪微博SDK Demo遇到的问题及解决
概述 这是新浪微博官方 Android SDK Demo 使用 Android Studio 导入.编译并运行通过的版本. 源码:WeiboSdkDemo 官方项目请点击: weibo_android ...