这是我的情况:
我希望列表将“标题”和标签部分视为列表标题,以便“标题”和标签不会在屏幕上保持固定,并且它们都会与列表一起滚动。
我不能简单地通过mListView.addHeaderView()
将标题和标签添加为列表的headerView,因为标签会在按下时换出“列表”内容区域。其他选项卡的内容区域将包含其他列表,标题和选项卡也应滚动显示新列表。
我很感激任何帮助。
答案 0 :(得分:0)
您可以覆盖getViewType方法,以便精确列出viewview的行数。
看看here。
答案 1 :(得分:0)
将整个事物想象成ListView。您可以根据需要多次调用addHeaderView()
,这样您就可以拥有两个标题视图(“标题”和“标签|标签|标签”)。
回复:
我不能简单地通过mListView.addHeaderView()将标题和标签添加为列表的headerView,因为标签会在按下时换出“列表”内容区域。
是的,你可以。
更新对列表数据的引用,然后致电mAdapter.notifyDataSetChanged()
。
答案 2 :(得分:0)
我和你有同样的需求,我发现这个项目可以完全满足您的需求,还有一些更令人眼花缭乱的技巧。
https://github.com/kmshack/Android-ParallaxHeaderViewPager
神奇的是将片段列表中发生的滚动绑定到活动中定义的标头。选项卡和列表中的滚动位置之间也存在基本绑定,以便在滑动时调整列表。 这段代码基于github repo但更简单(因此不那么健壮),阅读它只是为了理解发生了什么,然后在repo中读取源代码。
public class MyFragment extends Fragment implements OnScrollListener {
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
((MyParentActivity) getActivity()).onScrollFragment(view, mTabPosition);
}
public void adjustScroll(int scrollHeight) {
if (scrollHeight == 0 && fragmentListView.getFirstVisiblePosition() >= 1) {
return;
}
officesListView.setSelectionFromTop(1, scrollHeight);
}
}
然后在活动中你只需要这两个特定的方法
public class MyParentActivity implements ViewPager.OnPageChangeListener{
@Override
public void onPageSelected(int position)
myFragmentPagerAdapter.getFragmentAt(position)
.adjustScroll((int) (mHeader.getHeight() + ViewHelper.getTranslationY(mHeader)));
}
public void onScrollFragment(AbsListView view, int tabPosition) {
if (mViewPager.getCurrentItem() == tabPosition) {
int scrollY = getScrollY(view);
ViewHelper.setTranslationY(mHeader, Math.max(-scrollY, mMinHeaderTranslation));
}
}
}
由于NineOldAndroids的ViewHelper
,这段代码很适合API 8