githab上一款很好用的分組的listview滑動中固定標題的實現
https://github.com/beworker/pinned-section-listview
查看demo,知道使用pinned-section-listview,僅僅需要將封裝好的PinnedSectionListView拷貝至自己的項目中
<com.hb.views.PinnedSectionListView android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="wrap_content" />
除此之外還需要添加一部分代碼在adapter中:
// Our adapter class implements 'PinnedSectionListAdapter' interface class MyPinnedSectionListAdapter extends BaseAdapter implements PinnedSectionListAdapter { ... // We implement this method to return 'true' for all view types we want to pin @Override public boolean isItemViewTypePinned(int viewType) { return viewType == <type to be pinned>; } }
isItemViewTypePinned 這個方法的作用是確定哪個item是title,當item爲需要固定的title時,返回true。
那麼如何確定item是否是title?需要重寫另外兩個構造方法:
所給的demo中是這樣確定的:
@Override public int getViewTypeCount() {
return 2;
}
@Override public int getItemViewType(int position) {
return getItem(position).type;
}
@Override
public boolean isItemViewTypePinned(int viewType) {
return viewType == Item.SECTION;
}
getViewTypeCount()有幾種類型的item
<pre name="code" class="java" style="color: rgb(148, 82, 119); font-size: 14px; font-weight: bold; line-height: 20px;">getItemViewType(int position)返回item的類型,與<span style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;">isItemViewTypePinned(int viewType)對應</span>
再寫一種demo:
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
// TODO Auto-generated method stub
Item item=items.get(position);
if(item.isSection()){
return 1;
}else{
return 0;
}
}
@Override
public boolean isItemViewTypePinned(int viewType) {
// TODO Auto-generated method stub
if(viewType==1){
return true;
}else
return false;
}