diff --git a/.gitignore b/.gitignore index fe88257..10da075 100755 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,7 @@ *.ipr *.classpath *.project + + +build.xml +proguard-project.txt \ No newline at end of file diff --git a/library/.settings/org.eclipse.jdt.core.prefs b/library/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..b080d2d --- /dev/null +++ b/library/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/library/src/za/co/immedia/pinnedheaderlistview/PinnedHeaderListView.java b/library/src/za/co/immedia/pinnedheaderlistview/PinnedHeaderListView.java index 8277609..4b0331f 100644 --- a/library/src/za/co/immedia/pinnedheaderlistview/PinnedHeaderListView.java +++ b/library/src/za/co/immedia/pinnedheaderlistview/PinnedHeaderListView.java @@ -80,7 +80,7 @@ public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCoun int section = mAdapter.getSectionForPosition(firstVisibleItem); int viewType = mAdapter.getSectionHeaderViewType(section); mCurrentHeader = getSectionHeaderView(section, mCurrentHeaderViewType != viewType ? null : mCurrentHeader); - ensurePinnedHeaderLayout(mCurrentHeader); + ensurePinnedHeaderLayout(mCurrentHeader, false); mCurrentHeaderViewType = viewType; mHeaderOffset = 0.0f; @@ -115,14 +115,14 @@ private View getSectionHeaderView(int section, View oldView) { View view = mAdapter.getSectionHeaderView(section, oldView, this); if (shouldLayout) { // a new section, thus a new header. We should lay it out again - ensurePinnedHeaderLayout(view); + ensurePinnedHeaderLayout(view, false); mCurrentSection = section; } return view; } - private void ensurePinnedHeaderLayout(View header) { - if (header.isLayoutRequested()) { + private void ensurePinnedHeaderLayout(View header, boolean forceLayout) { + if (header.isLayoutRequested() || forceLayout) { int widthSpec = MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY); int heightSpec; ViewGroup.LayoutParams layoutParams = header.getLayoutParams(); @@ -140,13 +140,11 @@ private void ensurePinnedHeaderLayout(View header) { @Override protected void dispatchDraw(Canvas canvas) { super.dispatchDraw(canvas); - if (mAdapter == null || !mShouldPin || mCurrentHeader == null) return; + if (mAdapter == null || !mShouldPin || mCurrentHeader == null) + return; int saveCount = canvas.save(); canvas.translate(0, mHeaderOffset); - canvas.clipRect(0, 0, getWidth(), mCurrentHeader.getMeasuredHeight()); // needed - // for - // < - // HONEYCOMB + canvas.clipRect(0, 0, getWidth(), mCurrentHeader.getMeasuredHeight()); // needed for < HONEYCOMB mCurrentHeader.draw(canvas); canvas.restoreToCount(saveCount); } @@ -185,4 +183,10 @@ public void onItemClick(AdapterView adapterView, View view, int rawPosition, public abstract void onSectionClick(AdapterView adapterView, View view, int section, long id); } + + public void invalidateHeader() { + if (mCurrentHeader != null) { + ensurePinnedHeaderLayout(mCurrentHeader, true); + } + } } diff --git a/library/src/za/co/immedia/pinnedheaderlistview/SectionedBaseAdapter.java b/library/src/za/co/immedia/pinnedheaderlistview/SectionedBaseAdapter.java index 20957d3..ad760b6 100644 --- a/library/src/za/co/immedia/pinnedheaderlistview/SectionedBaseAdapter.java +++ b/library/src/za/co/immedia/pinnedheaderlistview/SectionedBaseAdapter.java @@ -179,6 +179,8 @@ public int getSectionHeaderViewTypeCount() { public abstract long getItemId(int section, int position); + public abstract Object getSectionItem(int section); + public abstract int getSectionCount(); public abstract int getCountForSection(int section);