Android ListView添加标头 联系人
来源:互联网 发布:网络最火尴舞视频 编辑:程序博客网 时间:2024/05/27 16:42
GitHub源代码
Android 并非支持原生分段标头,但是,通过将分段标头嵌入到列表项中,并在适当的时候令其可视或隐藏,这样
可以很容易地添加分段标头.
部分代码:
列表布局:
为分段标头创建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="45dp" android:gravity="center|start" android:text="标题" android:background="#ff0000" android:textColor="#ffffff" />
分段标头指定了自定义背景色以区别于列表中的普通文本,现在,在创建一个包含顶部固定分段标头的xml布局,
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" android:layout_width="fill_parent" android:layout_height="55dp" /></FrameLayout>id使用android id ,因此可以在listActivity的子类中使用它.将分段标头包含在帧布局中,这样该标头就可以与列表重叠在一起,以显示当前所在分段.
最后,创建列表项对应的XML文件,该布局既包含数据项也包含分段标头;
list_item.xml
<?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"> <TextView android:id="@+id/label" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <include layout="@layout/header" android:layout_width="fill_parent" android:layout_height="20dp" /></LinearLayout>为列表创建适配器,使用Adapter的子类用于填充列表项.与其他创建分段列表的不同之处,是 只需要重写getView(),不需要返回多种类型,也不需要在分段列表与原始列表转换数据项的位置.
SectionAdapter.java
public class SectionAdapter extends ArrayAdapter<String> { private Activity activity; public SectionAdapter(Activity context, String[] objects) { super(context, R.layout.list_item, R.id.label, objects); this.activity = context; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView==null){ convertView = activity.getLayoutInflater().inflate(R.layout.list_item,parent,false); } TextView header = (TextView)convertView.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, convertView, parent); }}
MainActivity.java
package com.akm.myapplication;import android.app.ListActivity;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.AbsListView;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.TextView;public class MainActivity 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)); 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);//更新文本显示 }}
1 0
- Android ListView添加标头 联系人
- android ListView添加头布局
- android 开发技巧(15)--为ListView添加分段标头
- android账本-添加listview,列头
- 为ListView添加分段标头
- ListView添加头布局
- android,添加联系人
- android 添加联系人分组
- android通讯录 添加联系人
- Android-通讯录:添加联系人
- android联系人获取,添加
- Android 批量添加联系人
- Android添加@联系人功能
- android联系人ListView布局效果
- ListView添加分段头信息
- Android 使用ContentProvider 添加联系人
- Android NFC标签添加联系人
- Android批量添加删除联系人
- 我使用的Linux命令
- Intent实现简单的值传递
- 慢慢总结C语言一些常用函数
- Catalog和Schema
- 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数), 凡报到3的人退出圈子,问最后留下 的是原来第几号的那位。
- Android ListView添加标头 联系人
- 【小牛分享】- 3D标签云
- GIS学习笔记之西安80转CGCS2000
- UI 炫技要不得!设计师别求花俏,简单明了才最重要
- JUnit4
- Linux Readingpackagelists Error! 解决办法
- IONIC安装部署入门教程
- 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数), 凡报到3的人退出圈子,问最后留下 的是原来第几号的那位。
- URAL 1003 Parity(并查集)