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的分组提示功能的更多相关文章

  1. FastScroll(2)不分组的listview 打开fastscroll的分组提示功能

    本文只让fastscroll具有提示分组功能,但listview并不显示分组,如果想让分组的listview显示fastscroll,看下篇. 1,在listview中打开fastscroll 2,自 ...

  2. FastScroll(1)ListView打开FastScroll及自定义它的样式

    打开 FastScroll 方式 android:fastScrollEnabled="true" 它是AbsListView的属性. <?xml version=" ...

  3. 打开程序总是会提示“Enter password to unlock your login keyring” ,如何成功关掉?

    p { margin-bottom: 0.1in; line-height: 120% } 一.一开始我是按照网友所说的 : rm -f ~/.gnome2/keyrings/login.keyrin ...

  4. 微信扫描打开APP下载链接提示代码优化

    上一次我发了一篇文章叫“微信打开网址添加在浏览器中打开提示”,里面我发出来了三个代码,分别是纯JS.js+html.jQuery+HTML代码.今天来一个简化版带可以关闭的按钮操作.使用的是纯JS+H ...

  5. 微信扫描打开APP下载链接提示代码优化(转)

    上一次我发了一篇文章叫“微信打开网址添加在浏览器中打开提示”,里面我发出来了三个代码,分别是纯JS.js+html.jQuery+HTML代码.今天来一个简化版带可以关闭的按钮操作.使用的是纯JS+H ...

  6. 打开mysql时,提示 1040,Too many connections

    打开mysql时,提示 1040,Too many connections,这样就无法打开数据库,看不了表里边的内容了. 出现这个问题的原因是,同时对数据库的连接数过大,mysql默认的最大连接数是1 ...

  7. [WPF]ListView点击列头排序功能实现

    [转]   [WPF]ListView点击列头排序功能实现 这是一个非常常见的功能,要求也很简单,在Column Header上显示一个小三角表示表示现在是在哪个Header上的正序还是倒序就可以了. ...

  8. Geany 编辑器打开 高亮所选单词 功能

    Geany 编辑器打开 高亮所选单词 功能 在Ubuntu 系统的Software Center 工具中,搜索到geany, 下方有个 Miscellanous Plugins for Geany, ...

  9. 如何打开Intellij IDEA的代码提示功能/联想/自动联想

    1.默认情况下,我们输入代码时IDEA会自动弹出代码提示框,这时候是不用按快捷键的,直接使用方向键选择我们需要的条目就可以了. 2:如果我们想主动 使用代码提示时,默认的快捷键是CTRL+空格,但是中 ...

随机推荐

  1. 【基于spark IM 的二次开发笔记】第一天 各种配置

    [基于spark IM 的二次开发笔记]第一天 各种配置 http://juforg.iteye.com/blog/1870487 http://www.igniterealtime.org/down ...

  2. SQL Server数据库连接类SQLHelper.cs

    using System; using System.Collections.Generic; using System.Text; using System.Configuration; using ...

  3. 分享php中四种webservice实现的简单架构方法及实例[转载]

    [转载]http://www.itokit.com/2012/0417/73615.html 本人所了解的webservice有以下几种:PHP本身的SOAP,开源的NUSOAP,商业版的PHPRPC ...

  4. [译]Java Thread wait, notify和notifyAll示例

    Java Thread wait, notify和notifyAll示例 Java上的Object类定义了三个final方法用于不同线程间关于某资源上的锁状态交互,这三个方法是:wait(), not ...

  5. 自从用了Less 编写css,你比以前更快了~(sublime编译)

    之所以用这个标题呢,主要是最近调侃杰伦太有意思了. 好吧,开个玩笑而已. 如果你了解过Less,并对之很熟悉,就不用往下看了. 如果你没用过,恭喜,这是一个入门级的教程,学会了它,可以为你节省10%的 ...

  6. 遍历字典时用与不用iter的区别

    遍历字典时用与不用iter的区别 遍历字典的时候一般会用这三个方法:keys(),values(),items() 同时,它们各自都有升级版的方法:iterkeys(),itervalues(),it ...

  7. ThinkPHP的缓存 F方法

    一般使用文件方式的缓存就能够满足要求,而thinkphp还提供了一个专门用于文件方式的快速缓存方法f方法. 由于采用的是php返回方式,所以其效率较s方法较高. f方法具有如下特点: 1.简单数据缓存 ...

  8. RecursiveDirectoryIterator目录操作类

    /** * @author Funsion Wu * @abstract SPL使用案例,全国首发,技术分享,欢迎转帖 */ class Dir extends RecursiveDirectoryI ...

  9. 拉链法解决Hash节点冲突问题

    <?php /* * hash::拉链法解决hash节点存储冲突问题 * ::2014-07-02 * ::Small_Kind */ class small_hash { private $s ...

  10. 总有你需要的之 ios 小技巧 (下)

    图片上绘制文字 写一个UIImage的category NSMutableParagraphStyle* paragraphStyle = [[NSParagraphStyle defaultPara ...