Android PinnedHeaderListView 详解

Android PinnedHeaderListView使用详解

PinnedHeaderListView 提供一些 钉头 会定在头部

它看起来像是 应用程序在Android 4.0

github 开源地址:https://github.com/JimiSmith/PinnedHeaderListView

效果图:

下载后导入 编辑工具里 libray 只有2个类

PinnedHeaderListView.java

SectionedBaseAdapter.java

(一) 使用:xml 布局 <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=""android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><za.co.immedia.pinnedheaderlistview.PinnedHeaderListViewandroid:id="@+id/pinnedListView"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@android:color/white" ></za.co.immedia.pinnedheaderlistview.PinnedHeaderListView></LinearLayout>Activitypublic class MainActivity extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);PinnedHeaderListView listView = (PinnedHeaderListView) findViewById(R.id.pinnedListView);LayoutInflater inflator = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);LinearLayout header1 = (LinearLayout) inflator.inflate(R.layout.list_item, null);((TextView) header1.findViewById(R.id.textItem)).setText("HEADER 1");LinearLayout header2 = (LinearLayout) inflator.inflate(R.layout.list_item, null);((TextView) header2.findViewById(R.id.textItem)).setText("HEADER 2");LinearLayout footer = (LinearLayout) inflator.inflate(R.layout.list_item, null);((TextView) footer.findViewById(R.id.textItem)).setText("FOOTER");listView.addHeaderView(header1);listView.addHeaderView(header2);listView.addFooterView(footer);TestSectionedAdapter sectionedAdapter = new TestSectionedAdapter();listView.setAdapter(sectionedAdapter);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.activity_main, menu);return true;}} adapter

继承 SectionedBaseAdapter

package za.co.immedia.pinnedheaderlistviewexample;import za.co.immedia.pinnedheaderlistview.SectionedBaseAdapter;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.LinearLayout;import android.widget.TextView;public class TestSectionedAdapter extends SectionedBaseAdapter {@Overridepublic Object getItem(int section, int position) {// TODO Auto-generated method stubreturn null;}@Overridepublic long getItemId(int section, int position) {// TODO Auto-generated method stubreturn 0;}@Overridepublic int getSectionCount() {//header的数量return 3;}@Overridepublic int getCountForSection(int section) {//子item的数量return 15;}@Overridepublic View getItemView(int section, int position, View convertView, ViewGroup parent) {//普通item的getview方法LinearLayout layout = null;if (convertView == null) {LayoutInflater inflator = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);layout = (LinearLayout) inflator.inflate(R.layout.list_item, null);} else {layout = (LinearLayout) convertView;}((TextView) layout.findViewById(R.id.textItem)).setText("Section " + section + " Item " + position);return layout;}@Overridepublic View getSectionHeaderView(int section, View convertView, ViewGroup parent) {//header的getview方法LinearLayout layout = null;if (convertView == null) {LayoutInflater inflator = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);layout = (LinearLayout) inflator.inflate(R.layout.header_item, null);} else {layout = (LinearLayout) convertView;}((TextView) layout.findViewById(R.id.textItem)).setText("Header for section " + section);return layout;}}(二)解析:

要使用它 需要继承 SectionedBaseAdapter

重写adapter之中的 6个方法

getItem(int section, int position); //section: header的位置数 ,position:普通item的位置数

getItemId(int section, int position); //获取item的id 第几个section的 position

getSectionCount(); //header的总数量

getCountForSection(int section); //普通 item 的总数量

getItemView(int section, int position, View convertView, ViewGroup parent);

// 普通item 加载view的方法 类似adapter中getview() 方法

getSectionHeaderView(int section, View convertView, ViewGroup parent);

// header item 加载view的方法 也类似adapter中getview() 方法

在使用的时候 可以使用hashmap 把list存起来 通过section 和 position 进行数据展示

也可以单独对section进行判断 展示不同的header

一个人去旅行,而且是去故乡的山水间徜徉。

Android PinnedHeaderListView 详解

相关文章:

你感兴趣的文章:

标签云: