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. @Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别

    ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别 对这四个的区别做一个总结,清理一下思路 ...

  2. php无极分类

    <?php date_default_timezone_set('PRC'); header('Content-type:text/html;charset=UTF-8'); /* $a_lis ...

  3. Pl/sql 导入数据错位问题

    在查询列的时候 多查询一列就可以了 当然是要在所有列对应的情况下 把第一列的 前追加一列 这样就不会错位了 例如如下图

  4. 关于javascript的window.onscroll方法

    ---恢复内容开始--- 今天在学习javascript的过程中被onscroll这个东西堵了一下午.心情极度郁闷. 在高度较大的网页中,我们通常会加一个返回顶部的按钮,方便用户操作. 代码如下: & ...

  5. css 面试学习

    最经在学习前端的一些东西 转载于http://www.cnblogs.com/lei2007/archive/2013/08/16/3262897.html 雅虎的css前端的35条定律

  6. MQ 2035(MQRC_NOT_AUTHORIZED)

    当使用MQ7.1或7.5时,如果使用MQ管理员账号去连接MQ服务器,可能会报以下的错误,提示你权限不足. 2035 MQRC_NOT_AUTHORIZED 在之前的版本中是没有这个问题的. 原因是在7 ...

  7. Qt编译postgreSQL驱动

    安装postgreSQL,安装目录下的lib和bin添加到path 打开Qt安装目录,找到src\plugins\sqldrivers\psql编辑psql.pro,添加INCLUDEPATH += ...

  8. Java第一阶段总结

    学习java已经一个多月的时间了,第一阶段总算完成了. 这中间遇到很多问题,通过问同学问学长,收获了很多,但也知道自己和其他同学相差很远.他们java第一阶段只用了不到一个月的时间,而我拖了很长时间, ...

  9. (转)[C++语法] 关键字typedef用法

    转自http://www.cnblogs.com/SweetDream/archive/2006/05/10/395921.html C/C++语言中的typedef相信大家已经不陌生,本文对C/C+ ...

  10. Object调用静态方法

    谁说空指针不能调用方法 public class Foo { public static void bar() { System.out.println("bar"); } pub ...