Android ListView實現品種分類效果
我們有時候會遇到這麼一個情況。就是我在一個ListView裡面需要顯示的東西其實是有種類之分的。比如我要分冬天,夏天,秋天,春天,然後在這每個季節下面再去載入各自的條目資料。還有,比如我們的通訊錄,我們需要按A,B,C這樣的字母順序分類然後顯示。這個怎麼實現呢?
下面我們不用ExpandableListView,而是隻用ListView來實現這一顯示效果。
MainActivity.java
package com.xzq.listviewadapter; import android.app.Activity; import android.os.Bundle; import android.view.Window; import android.widget.ListView; public class MainActivity extends Activity { private String[] string = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); ListView listview = (ListView) findViewById(R.id.listview); MyCustomAdapter adapter = new MyCustomAdapter(this); int size = string.length; for (int i = 0; i < size; i++) { adapter.addSeparatorItem(string[i]); for (int k = 0; k < 5; k++) { adapter.addItem("item " + k); } } listview.setAdapter(adapter); } }
MyCustomAdapter.java
package com.xzq.listviewadapter; import java.util.ArrayList; import java.util.TreeSet; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class MyCustomAdapter extends BaseAdapter { private static final int TYPE_ITEM = 0; private static final int TYPE_SEPARATOR = 1; private static final int TYPE_MAX_COUNT = TYPE_SEPARATOR + 1; private ArrayList<String> data = new ArrayList<String>(); private LayoutInflater inflater; private TreeSet<Integer> set = new TreeSet<Integer>(); public MyCustomAdapter(Context context) { inflater = LayoutInflater.from(context); } public void addItem(String item) { data.add(item); } public void addSeparatorItem(String item) { data.add(item); set.add(data.size() - 1); } public int getItemViewType(int position) { return set.contains(position) ? TYPE_SEPARATOR : TYPE_ITEM; } @Override public int getViewTypeCount() { return TYPE_MAX_COUNT; } @Override public int getCount() { return data.size(); } @Override public Object getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; int type = getItemViewType(position); if (convertView == null) { holder = new ViewHolder(); switch (type) { case TYPE_ITEM: convertView = inflater.inflate(R.layout.item1, null); holder.textView = (TextView) convertView .findViewById(R.id.item1); break; case TYPE_SEPARATOR: convertView = inflater.inflate(R.layout.item2, null); holder.textView = (TextView) convertView .findViewById(R.id.item2); break; } convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.textView.setText(data.get(position)); return convertView; } public static class ViewHolder { public TextView textView; } }
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffff" android:orientation="vertical" > <ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout>
item1.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffff" android:orientation="vertical" > <TextView android:id="@+id/item1" android:layout_width="fill_parent" android:layout_height="30dip" android:gravity="center_vertical" /> </LinearLayout>
item2.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/item2" android:layout_width="fill_parent" android:layout_height="30dip" android:background="#3c4857" android:gravity="center_vertical" /> </LinearLayout>
相關文章
- iOS 類知乎”分頁”效果的實現?iOS
- 分頁實現前臺後臺不同效果,分頁類引入
- select下拉選單實現分類級聯效果
- Android中使用RecyclerView + SnapHelper實現類似ViewPager效果AndroidViewpager
- android 用ListView實現表格樣式AndroidView
- PHP + MySQL 無限分類實現的2種方法PHPMySql
- Android水波紋效果實現Android
- ListView 實現帶有Filpper效果的左右滑動刪除 ItemView
- Flutter 類抽屜效果動畫實現。Flutter動畫
- Tp框架實現好看分頁效果框架
- VUE實現評分效果和不同型別分數展示效果元件Vue型別元件
- Android實現蛛網背景效果Android
- Android 毛玻璃效果的實現Android
- Android 從零開始實現RecyclerView分組及粘性頭部效果AndroidView
- CSS3實現多種背景效果CSSS3
- 微信小程式實現星星評分效果微信小程式
- vue+Element-ui實現分頁效果VueUI
- 教你如何使用MvcPager實現分頁效果MVC
- Android ListView收縮與展開的封裝實現AndroidView封裝
- Pytorch實現分類器PyTorch
- Oralce 分頁 三種實現
- 毛玻璃效果在Android的實現Android
- 一個分數類的實現——Rational類
- Android ListViewAndroidView
- 在鴻蒙中實現類似瀑布流效果鴻蒙
- 實現圖片染色效果的三種方式
- android開發(3):列表listview的實現 | 下拉重新整理AndroidView
- Bert文字分類實踐(一):實現一個簡單的分類模型文字分類模型
- PHP實現無限極分類PHP
- 通用mapper和分類實現APP
- 貝葉斯實現文字分類C++實現文字分類C++
- 在程式碼中實現android:tint效果Android
- Android UI 實現廣告 Banner 輪播效果AndroidUI
- Android實現Activity的滑動返回效果Android
- 概率分類之樸素貝葉斯分類(垃圾郵件分類python實現)Python
- 實現帶圖示的ListViewView
- Android中使用ListView實現分頁重新整理(執行緒休眠模擬)(滑動載入列表)AndroidView執行緒
- 破解垃圾分類難題,智慧分類如何實現最優解?