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添加分段标头的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Android ListView添加头布局和脚布局实例详解

    Android ListView添加头布局和脚布局 之前学习喜马拉雅的时候做的一个小Demo,贴出来,供大家学习参考: 如果我们当前的页面有多个接口.多种布局的话,我们一般的选择无非就是1.多布局:2.各种复杂滑动布局外面套一层ScrollView(好low):3.头布局脚布局.有的时候我们用多布局并不能很好的实现,所以头布局跟脚布局就是我们最好的选择了:学过了ListView的话原理很简单,没啥理解的东西,直接贴代码了: 效果图: 正文部分布局: fragment_classify.xml <

  • Android 为ListView添加分段标头的方法

    效果图: 我记得github上有一个类似的效果github类似效果 说一下实现这个效果的思路:在列表项中嵌入分段标头,然后根据需要显示或者隐藏分段标头,创建一个特殊的TextView,让其叠加在列表的顶部,当列表滚动到一个新的分段时,就更新其内容 创建列表布局 创建一个xml,随列表滚动的分段标头和列表顶部的固定分段标头复用这个布局文件 header.xml <?xml version="1.0" encoding="utf-8"?> <TextV

  • Android使用ListView批量删除item的方法

    本文实例讲述了Android使用ListView批量删除item的方法.分享给大家供大家参考,具体如下: 利用CheckBox选中一个或多个item,最后批量删除它们. 程序运行效果图如下:   下面开始上码: (代码已更正,已解决滚动时紊乱的问题) package com.test.adapter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;

  • Android实现ListView异步加载的方法(改进版)

    本文实例讲述了Android实现ListView异步加载的方法.分享给大家供大家参考,具体如下: @Override public View getView(int position, View convertView, ViewGroup parent) { ---- ViewHolder VH = null; ---- VH.mImageView.setTag(position); VH.mThumb.setImageDrawable(imageLoader.loadDrawable(pos

  • Android为View添加拖放效果的方法实例

    目录 1.引言 2.主要方法和类介绍 2.1startDragAndDrop()和startDrag() 2.2setOnDragListener() 2.3View.DragShadowBuilder 2.4DragEvent 3.演示将一张图片拖放到方框内 3.1简易布局 3.2操作被拖放的图片 3.3方框接收图片 4.总结 1.引言 在开发中,拖放是一种比较常见的手势操作,使用它能够让应用的交互更加地便捷和友好,本文将简要介绍如何为Android中的View添加拖放效果. 2.主要方法和类

  • Android中ListView设置静态数据的方法

    有的时候我们需要为一个listview设置固定的数据,下边就是如何设置静态的数据,之前先给大家看一看效果图: 布局文件listview 的主页面 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="matc

  • Android实现RecyclerView添加分割线的简便方法

    1.前言 刚开始学习RecyclerView的时候我跟着一个视频学的,当时添加分割线是从外面导入一个Java类,然后使用里面的函数来创建分割线的,所以一直以来我都是这样做的.直到前几天才无意中发现,原来v7包中提供了一个DividerItemDecoration类,利用它,我们可以很简单地实现RecyclerView的分割线!那还等什么呢?赶紧用起来. 2.创建一个简单的RecyclerView 首先当然应该来一个RecyclerView,这里就不再赘述了,随便造点数据就好.直接上代码: pub

  • android基础教程之android的listview与edittext冲突解决方法

    最近遇到一个关于android软键盘的问题.在ListView中每个Item中都有个EditText,在最后的几个Item中,EditText第一次点击界面还能向上弹出,正常显示, 但第二次点击时,软件盘就把最后的几个Item给正当住了.这样很影响用户体验的. 其实解决的办法只要想一下,我相信有经验的开发人员就能够想到,让软键盘在消失的时候让相应Item中的EditText消失焦点clearFouce():但是有个关键的问题, 就是在获得返回事件的时候,如果获得的事件不对那就不会达到想要的效果.

  • Android在listview添加checkbox实现原理与代码

    主界面CheckBoxinListViewActivity.java代码如下: 复制代码 代码如下: public class CheckBoxinListViewActivity extends Activity { /** Called when the activity is first created. */ private MyAdapter adapter; private ListView listview; private Button checkAll; private But

  • Android开发ListView中下拉刷新上拉加载及带列的横向滚动实现方法

    ListView 控件可使用四种不同视图显示项目.通过此控件,可将项目组成带有或不带有列标头的列,并显示伴随的图标和文本. 可使用 ListView 控件将称作 ListItem 对象的列表条目组织成下列四种不同的视图之一:1.大(标准)图标2.小图标3.列表4.报表 View 属性决定在列表中控件使用何种视图显示项目. 还可用 LabelWrap 属性控制列表中与项目关联的标签是否可换行显示.另外,还可管理列表中项目的排序方法和选定项目的外观. 相信有很人做的项目估计都用的到这个.就是List

  • Android中ListView下拉刷新的实现方法实例分析

    本文实例讲述了Android中ListView下拉刷新的实现方法.分享给大家供大家参考,具体如下: ListView中的下拉刷新是非常常见的,也是经常使用的,看到有很多同学想要,那我就整理一下,供大家参考.那我就不解释,直接上代码了. 这里需要自己重写一下ListView,重写代码如下: package net.loonggg.listview; import java.util.Date; import android.content.Context; import android.util.

随机推荐