Android:如何在列表外创建ListView标头?

时间:2014-03-13 08:18:53

标签: android android-layout android-listview android-tabs

这是我的情况:

enter image description here

我希望列表将“标题”和标签部分视为列表标题,以便“标题”和标签不会在屏幕上保持固定,并且它们都会与列表一起滚动。

我不能简单地通过mListView.addHeaderView()将标题和标签添加为列表的headerView,因为标签会在按下时换出“列表”内容区域。其他选项卡的内容区域将包含其他列表,标题和选项卡也应滚动显示新列表。

我很感激任何帮助。

3 个答案:

答案 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