国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 為ListView添加分段標頭的方法

2019-10-23 18:31:13
字體:
來源:轉載
供稿:網友

效果圖:

android,listview

我記得github上有一個類似的效果github類似效果

說一下實現這個效果的思路:在列表項中嵌入分段標頭,然后根據需要顯示或者隱藏分段標頭,創建一個特殊的TextView,讓其疊加在列表的頂部,當列表滾動到一個新的分段時,就更新其內容

創建列表布局

創建一個xml,隨列表滾動的分段標頭和列表頂部的固定分段標頭復用這個布局文件

header.xml

<?xml version="1.0" encoding="utf-8"?><TextView xmlns:android="http://schemas.android.com/apk/res/android"  android:id="@+id/header"  style="@android:style/TextAppearance.Small"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:background="#0000ff" />

主布局list.xml

<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent"  android:layout_height="fill_parent" >  <ListView    android:id="@android:id/list"    android:layout_width="fill_parent"    android:layout_height="fill_parent" />  <include layout="@layout/header" /></FrameLayout>

創建列表項布局文件list_item.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="wrap_content"  android:orientation="vertical" >  <include layout="@layout/header" />  <TextView    android:id="@+id/label"    style="@android:style/TextAppearance.Large"    android:layout_width="fill_parent"    android:layout_height="wrap_content" /></LinearLayout>

SectionAdapter.java

 

public class SectionAdapter extends ArrayAdapter<String> { private Activity activity; public SectionAdapter(Activity activity, String[] objects) {  super(activity, R.layout.list_item, R.id.label, objects);//為自定義視圖指定XML布局文件  this.activity = activity; } @Override public View getView(int position, View view, ViewGroup parent) {  if (view == null) {   view = activity.getLayoutInflater().inflate(R.layout.list_item,     parent, false);  }  TextView header = (TextView) view.findViewById(R.id.header);  String label = getItem(position);  if (position == 0//檢查列表項起始字母是否發生了改變,如果發生改變,該列表項就是分段中的第一項,修改分段標頭的內容并顯示該分段標頭,否則隱藏    || getItem(position - 1).charAt(0) != label.charAt(0)) {   header.setVisibility(View.VISIBLE);   header.setText(label.substring(0, 1));  } else {   header.setVisibility(View.GONE);//隱藏分段標頭  }  return super.getView(position, view, parent); }}

主界面

public class Hack26Activity extends ListActivity {  private TextView topHeader;//用于訪問分段標頭  private int topVisiblePosition = -1;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.list);    topHeader = (TextView) findViewById(R.id.header);    setListAdapter(new SectionAdapter(this, Countries.COUNTRIES));    //設置滾動監聽器,當用戶滾動列表時,檢查位置是否發生了變化,如果改變,調用setTopHeader更新懸浮的分段標頭,當列表第一次顯示時,確保根據第一個列表項初始化分段標頭    getListView().setOnScrollListener(        new AbsListView.OnScrollListener() {          @Override          public void onScrollStateChanged(AbsListView view,                           int scrollState) {            // Empty.          }          @Override          public void onScroll(AbsListView view, int firstVisibleItem,                     int visibleItemCount, int totalItemCount) {            if (firstVisibleItem != topVisiblePosition) {              topVisiblePosition = firstVisibleItem;              setTopHeader(firstVisibleItem);            }          }        });    setTopHeader(0);  }  private void setTopHeader(int pos) {    final String text = Countries.COUNTRIES[pos].substring(0, 1);    topHeader.setText(text);//更新文本內容  }}

以上這篇Android 為ListView添加分段標頭的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 襄樊市| 井陉县| 永济市| 当雄县| 天祝| 海盐县| 宁城县| 鄂托克旗| 乌苏市| 定襄县| 崇信县| 双江| 泊头市| 漠河县| 达拉特旗| 临夏市| 彭山县| 汝南县| 鸡西市| 巴楚县| 湘阴县| 周宁县| 扬中市| 读书| 修武县| 花莲市| 丁青县| 武强县| 那坡县| 咸阳市| 河西区| 乌拉特后旗| 南昌市| 石景山区| 玉门市| 禹州市| 探索| 哈巴河县| 同江市| 柏乡县| 伊通|