一、先看效果图
二、为了使用方便,这里我将这个功能打成了一个jar包,在这里附上jar包的下载
http://download.csdn.net/detail/qq_35373333/9909677
三、先贴三个布局文件:
activity_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:orientation="vertical">
<com.example.zhuxiaofeng.pinnedheaderlistviewdemo.PinnedHeaderListView
android:id="@+id/pinnedListView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white">
</com.example.zhuxiaofeng.pinnedheaderlistviewdemo.PinnedHeaderListView>
</LinearLayout>
header_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#aa000000">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textItem"
android:height="82dp"
android:textColor="#FFFFFFFF"/>
</LinearLayout>
list_item.xml
下面是适配器和Activity的代码:<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#FFF" android:orientation="horizontal"> <TextView android:id="@+id/textItem" android:layout_width="wrap_content" android:layout_height="wrap_content" android:height="42dp" android:background="#FFF" android:textColor="#FF000000" /> </LinearLayout>
新建一个适配器继承自:SectionedBaseAdapter
适配器很简单,重要的方法注释都加上了,如果还是看不太懂的话建议运行一下项目,跑起来就瞬间懂了。package com.example.zhuxiaofeng.pinnedheaderlistviewdemo; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; import com.example.pinnedheaderlistview.SectionedBaseAdapter; public class TestSectionedAdapter extends SectionedBaseAdapter { @Override public Object getItem(int section, int position) { return null; } @Override public long getItemId(int section, int position) { return 0; } /** * item的条数 * * @return */ @Override public int getSectionCount() { return 7; } /** * 每一个item下的条数 * * @param section * @return */ @Override public int getCountForSection(int section) { return 15; } /** * item布局 * * @param section * @param position * @param convertView * @param parent * @return */ @Override public View getItemView(int section, int position, View convertView, ViewGroup parent) { 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; } /** * item头布局 * * @param section * @param convertView * @param parent * @return */ @Override public View getSectionHeaderView(int section, View convertView, ViewGroup parent) { 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; } }
再看Activity代码:
package com.example.zhuxiaofeng.pinnedheaderlistviewdemo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import com.example.pinnedheaderlistview.PinnedHeaderListView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); PinnedHeaderListView listView = (PinnedHeaderListView) findViewById(R.id.pinnedListView); TestSectionedAdapter sectionedAdapter = new TestSectionedAdapter(); listView.setAdapter(sectionedAdapter); } }
好了,项目运行起来后就看到开始如图的效果了。