`
阿尔萨斯
  • 浏览: 4170494 次
社区版块
存档分类
最新评论

Android开发之ListView实现不同品种分类分隔栏的效果(非ExpandableListView实现)

 
阅读更多

我们有时候会遇到这么一个情况。就是我在一个ListView里面需要显示的东西其实是有种类之分的。比如我要分冬天,夏天,秋天,春天,然后在这每个季节下面再去加载各自的条目数据。还有,比如我们的通讯录,我们需要按A,B,C这样的字母顺序分类然后显示。这个怎么实现呢?

下面我们不用ExpandableListView,而是只用ListView来实现这一显示效果。



MainActivity.java

  1. packagecom.xzq.listviewadapter;
  2. importandroid.app.Activity;
  3. importandroid.os.Bundle;
  4. importandroid.view.Window;
  5. importandroid.widget.ListView;
  6. publicclassMainActivityextendsActivity{
  7. privateString[]string={"A","B","C","D","E","F","G","H","I",
  8. "J","K","L","M","N","O","P","Q","R","S","T","U","V",
  9. "W","X","Y","Z"};
  10. /**Calledwhentheactivityisfirstcreated.*/
  11. @Override
  12. publicvoidonCreate(BundlesavedInstanceState){
  13. super.onCreate(savedInstanceState);
  14. requestWindowFeature(Window.FEATURE_NO_TITLE);
  15. setContentView(R.layout.main);
  16. ListViewlistview=(ListView)findViewById(R.id.listview);
  17. MyCustomAdapteradapter=newMyCustomAdapter(this);
  18. intsize=string.length;
  19. for(inti=0;i<size;i++){
  20. adapter.addSeparatorItem(string[i]);
  21. for(intk=0;k<5;k++){
  22. adapter.addItem("item"+k);
  23. }
  24. }
  25. listview.setAdapter(adapter);
  26. }
  27. }

MyCustomAdapter.java

  1. packagecom.xzq.listviewadapter;
  2. importjava.util.ArrayList;
  3. importjava.util.TreeSet;
  4. importandroid.content.Context;
  5. importandroid.view.LayoutInflater;
  6. importandroid.view.View;
  7. importandroid.view.ViewGroup;
  8. importandroid.widget.BaseAdapter;
  9. importandroid.widget.TextView;
  10. publicclassMyCustomAdapterextendsBaseAdapter{
  11. privatestaticfinalintTYPE_ITEM=0;
  12. privatestaticfinalintTYPE_SEPARATOR=1;
  13. privatestaticfinalintTYPE_MAX_COUNT=TYPE_SEPARATOR+1;
  14. privateArrayList<String>data=newArrayList<String>();
  15. privateLayoutInflaterinflater;
  16. privateTreeSet<Integer>set=newTreeSet<Integer>();
  17. publicMyCustomAdapter(Contextcontext){
  18. inflater=LayoutInflater.from(context);
  19. }
  20. publicvoidaddItem(Stringitem){
  21. data.add(item);
  22. }
  23. publicvoidaddSeparatorItem(Stringitem){
  24. data.add(item);
  25. set.add(data.size()-1);
  26. }
  27. publicintgetItemViewType(intposition){
  28. returnset.contains(position)?TYPE_SEPARATOR:TYPE_ITEM;
  29. }
  30. @Override
  31. publicintgetViewTypeCount(){
  32. returnTYPE_MAX_COUNT;
  33. }
  34. @Override
  35. publicintgetCount(){
  36. returndata.size();
  37. }
  38. @Override
  39. publicObjectgetItem(intposition){
  40. returndata.get(position);
  41. }
  42. @Override
  43. publiclonggetItemId(intposition){
  44. returnposition;
  45. }
  46. @Override
  47. publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
  48. ViewHolderholder=null;
  49. inttype=getItemViewType(position);
  50. if(convertView==null){
  51. holder=newViewHolder();
  52. switch(type){
  53. caseTYPE_ITEM:
  54. convertView=inflater.inflate(R.layout.item1,null);
  55. holder.textView=(TextView)convertView
  56. .findViewById(R.id.item1);
  57. break;
  58. caseTYPE_SEPARATOR:
  59. convertView=inflater.inflate(R.layout.item2,null);
  60. holder.textView=(TextView)convertView
  61. .findViewById(R.id.item2);
  62. break;
  63. }
  64. convertView.setTag(holder);
  65. }else{
  66. holder=(ViewHolder)convertView.getTag();
  67. }
  68. holder.textView.setText(data.get(position));
  69. returnconvertView;
  70. }
  71. publicstaticclassViewHolder{
  72. publicTextViewtextView;
  73. }
  74. }

main.xml

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:background="#ffffff"
  6. android:orientation="vertical">
  7. <ListView
  8. android:id="@+id/listview"
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:text="@string/hello"/>
  12. </LinearLayout>


item1.xml
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:background="#ffffff"
  6. android:orientation="vertical">
  7. <TextView
  8. android:id="@+id/item1"
  9. android:layout_width="fill_parent"
  10. android:layout_height="30dip"
  11. android:gravity="center_vertical"/>
  12. </LinearLayout>


item2.xml

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical">
  6. <TextView
  7. android:id="@+id/item2"
  8. android:layout_width="fill_parent"
  9. android:layout_height="30dip"
  10. android:background="#3c4857"
  11. android:gravity="center_vertical"/>
  12. </LinearLayout>







分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics