0

Я создал DialogFragment, и внутри него есть ViewPager, который имеет 3 вкладки. Я хочу изменить высоту ViewPager в соответствии с текущей вкладкой. Вот мой код:Как изменить высоту ViewPager в соответствии с текущей вкладкой?

mViewPager.setAdapter(mAdapter); 
mTabLayout.setupWithViewPager(mViewPager); //TabLayout of Android Support Design Library 
mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
    @Override 
    public void onPageSelected(int position) { 
     super.onPageSelected(position); 
     ViewGroup.LayoutParams params = mViewPager.getLayoutParams(); 
     params.height = mTabHeights.get(position); 
    } 
}); 

Это не всегда полезно. Когда я прокручиваю ViewPager, он может динамически изменять высоту в соответствии с текущей вкладкой, все работает хорошо. Однако, , когда я нажимаю вкладки внутри TabLayout, страница не всегда может изменяться на вкладку, которую я хочу выбрать. Кроме того, я вижу некоторые странное поведение, как:

  1. индикатор прокручивается, чтобы исправить положение, но textColors обоих предыдущей вкладки и вкладки Я хочу, чтобы выбрать не изменить (я установить различные цвета для выбранных и невыделенные вкладки от TabLayout 's API)
  2. Индикатор прокручивается до правильного положения, цвета также правильные. Высота ViewPager также изменяется на правильный номер, но содержимое вкладки неверно (иногда оно не изменяется, иногда оно становится пустым).

Я обнаружил, что onPageSelected() не всегда вызывался, когда я щелкал вкладками внутри TabLayout. Но если я переведу код смены LayoutParamsViewPager, его можно будет назвать правильно.

Итак, в чем проблема? И как я могу изменить высоту ViewPager динамически для разных вкладок? Спасибо за любые ответы/комментарии заранее!

+0

Используйте это: https://github.com/rnevet/WCViewPager, это ViewPager, который обрабатывает wrap_content и динамически изменяет высоту. – Raanan

+0

@Raanan Я пробовал это раньше, но это не работает в моем случае. – ywwynm

ответ

0

Ответ: после установки params.height, я должен позвонить mViewPager.requestLayout(), чтобы внести изменения в работу немедленно.

Во многих случаях View#requestLayout() или View#setLayoutParams() не требуется. Но на этот раз один из них должен появиться.

Смежные вопросы