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="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <za.co.immedia.pinnedheaderlistview.PinnedHeaderListView        android:id="@+id/pinnedListView"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:background="@android:color/white" >    </za.co.immedia.pinnedheaderlistview.PinnedHeaderListView></LinearLayout>

Activity

public class MainActivity extends Activity {    @Override    public 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);    }    @Override    public 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 {    @Override    public Object getItem(int section, int position) {        // TODO Auto-generated method stub        return null;    }    @Override    public long getItemId(int section, int position) {        // TODO Auto-generated method stub        return 0;    }    @Override    public int getSectionCount() {//header的数量        return 3;    }    @Override    public int getCountForSection(int section) {//子item的数量        return 15;    }    @Override    public 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;    }    @Override    public 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个方法

  • public Object getItem(int section, int position);
  • public long getItemId(int section, int position);
  • public int getSectionCount();
  • public int getCountForSection(int section);
  • public View getItemView(int section, int position, View convertView, ViewGroup parent);
  • public View getSectionHeaderView(int section, View convertView, ViewGroup parent);

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


最后神兽镇楼

//┏┓   ┏┓//┏┛┻━━━┛┻┓//┃       ┃  //┃   ━   ┃//┃ ┳┛ ┗┳ ┃//┃       ┃//┃   ┻   ┃//┃       ┃//┗━┓   ┏━┛//  ┃   ┃   神兽保佑        //  ┃   ┃   代码无BUG!//  ┃   ┗━━━┓//  ┃       ┣┓//  ┃       ┏┛//  ┗┓┓┏━┳┓┏┛//    ┃┫┫ ┃┫┫//    ┗┻┛ ┗┻┛

转载请注明: http://blog.csdn.net/aaawqqq/article/details/43866339


祝大家新年快乐


更多相关文章

  1. android 字体的使用
  2. Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面
  3. Android的布局方法
  4. Android美工之Shape
  5. Android(安卓)API Level概念
  6. android消息机制原理详解
  7. Android(安卓)面试题总结之Android(安卓)基础(六)
  8. Android字体(一)
  9. Android(安卓)自定义属性与xmlns

随机推荐

  1. [置顶] 深入浅出 - Android系统移植与平
  2. Unity3D接入微信开放平台SDK(有Unity demo
  3. android view 的使用
  4. Android(安卓)公用XML解析
  5. 用NDK调用Android手机自带的openssl库函
  6. Hbuilder 云打包发布app教程 (Android)
  7. Android(安卓)Activity 生命周期再验证
  8. Android(安卓)AsyncTask 的实现及 cancel
  9. android 4.0中关于webview加载flash并使f
  10. Android配置环境变量