上面代码中的界面就是xml中包含了一个PullToRefreshListView,比较简单这个地方就不贴出来了,我们看到在listViewAddHeader中,这个地方添加了一个与悬浮头等高的头部,这样就可以将内容区域给呈现出来,不会被悬浮头遮挡,其次在list的listener中我们将onScorll传到了主界面,这样Listview滚动,就可以将当前滚动的距离计算出来,修正悬浮头的距离。
我们再贴出上面剩下的代码ScrollTabHolderFragment.java与ScrollTabHolder.java
public abstract class ScrollTabHolderFragment extends Fragment implements ScrollTabHolder {
private int fragmentId;
protected ScrollTabHolder scrollTabHolder;
public void setScrollTabHolder(ScrollTabHolder scrollTabHolder) {
this.scrollTabHolder = scrollTabHolder;
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount,
int pagePosition) {
// nothing
}
@Override
public void onHeaderScroll(boolean isRefreashing, int value, int pagePosition) {
}
public int getFragmentId() {
return fragmentId;
}
public void setFragmentId(int fragmentId) {
this.fragmentId = fragmentId;
}
}
public interface ScrollTabHolder {
void adjustScroll(int scrollHeight);
void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount, int pagePosition);
void onHeaderScroll(boolean isRefreashing, int value, int pagePosition);
}
最后我们来看看adaper
public class SlidingPagerAdapter extends FragmentPagerAdapter {
protected final ScrollTabHolderFragment[] fragments;
protected final Context context;
private SparseArrayCompat<ScrollTabHolder> mScrollTabHolders;
private ScrollTabHolder mListener;
public int getCacheCount() {
return PageAdapterTab.values().length;
}
public SlidingPagerAdapter(FragmentManager fm, Context context, ViewPager pager) {
super(fm);
fragments = new ScrollTabHolderFragment[PageAdapterTab.values().length];
this.context = context;
mScrollTabHolders = new SparseArrayCompat<ScrollTabHolder>();
init(fm);
}
private void init(FragmentManager fm) {
for (PageAdapterTab tab : PageAdapterTab.values()) {
try {
ScrollTabHolderFragment fragment = null;
List<Fragment> fs = fm.getFragments();
if (fs != null) {
for (Fragment f : fs) {
if (f.getClass() == tab.clazz) {
fragment = (ScrollTabHolderFragment) f;
break;
}
}
}
if (fragment == null) {
fragment = (ScrollTabHolderFragment) tab.clazz.newInstance();
}
fragments[tab.tabIndex] = fragment;
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
public void setTabHolderScrollingListener(ScrollTabHolder listener) {
mListener = listener;
}
@Override
public ScrollTabHolderFragment getItem(int pos) {
ScrollTabHolderFragment fragment = fragments[pos];
mScrollTabHolders.put(pos, fragment);
if (mListener != null) {
fragment.setScrollTabHolder(mListener);
}
return fragment;
}
public SparseArrayCompat<ScrollTabHolder> getScrollTabHolders() {
return mScrollTabHolders;
}
@Override
public int getCount() {
return PageAdapterTab.values().length;
}
@Override
public CharSequence getPageTitle(int position) {
PageAdapterTab tab = PageAdapterTab.fromTabIndex(position);
int resId = tab != null ? tab.resId : 0;
return resId != 0 ? context.getText(resId) : "";
}
}










