Android: как создать заголовок ListView вне списка?

Это моя ситуация:

введите здесь описание изображения

Я хотел бы, чтобы список рассматривал разделы «заголовок» и вкладки как заголовок списка, чтобы «заголовок» и вкладки не оставались фиксированными на экране, и все они прокручивались вместе со списком.

Я не могу просто добавить заголовок и вкладки в качестве заголовка для списка через mListView.addHeaderView(), потому что при нажатии вкладки будут менять область содержимого «Список». Область содержимого для других вкладок будет содержать другие списки, а заголовок и вкладки также должны прокручиваться вместе с новым списком.

Буду признателен за любую помощь.


person James    schedule 13.03.2014    source источник
comment
i.imgur.com/gy8lV.gif   -  person dcow    schedule 13.03.2014
comment
@dcow по сути ничего, я пытаюсь все обдумать   -  person James    schedule 13.03.2014
comment
@Джеймс, тебе удалось добиться такого дизайна?   -  person vfede    schedule 06.05.2015


Ответы (3)


Вы можете переопределить метод getViewType, чтобы точно определить, сколько строк имеет ваш список.

Посмотрите здесь.

person S.Thiongane    schedule 13.03.2014

Думайте обо всем этом как о ListView. Вы можете вызывать addHeaderView() столько раз, сколько хотите, чтобы иметь два вида заголовков ("Заголовок" и "Вкладка | Вкладка | Вкладка").

Re:

Я не могу просто добавить заголовок и вкладки в качестве заголовка для списка с помощью mListView.addHeaderView(), потому что при нажатии вкладки будут меняться областью содержимого «Список».

Да, ты можешь.

Обновите ссылку на данные списка и вызовите mAdapter.notifyDataSetChanged().

person dcow    schedule 13.03.2014

У меня была та же потребность, что и у вас, я нашел этот проект, который реализует именно то, что вам нужно, плюс еще несколько приятных глазу трюков.

https://github.com/kmshack/Android-ParallaxHeaderViewPager

Магия привязывает прокрутку, которая происходит в списке фрагментов, к заголовку, определенному в действии. Также существует принципиальная привязка между выбором вкладки и положением прокрутки в списке, для настройки списков при свайпе. Этот код основан на этом репозитории github, но он проще (поэтому менее надежен), прочитайте его, чтобы понять, что происходит, а затем прочитайте исходный код в репозитории.

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));
        }
  }
}

этот код подходит для API 8 благодаря ViewHelper NineOldAndroids

person vfede    schedule 06.05.2015