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的API制定)
  2. 該指標滾動到正確的位置,顏色也是正確的。 ViewPager的高度也改爲正確的數字,但標籤的內容是錯誤的(有時它不會改變,有時會變成空白)。

我發現在點擊TabLayout內的選項卡時並不總是調用onPageSelected()。但如果我移動更改LayoutParamsViewPager的代碼,則可以正確調用它。

那麼,什麼問題? 如何爲不同的標籤動態更改ViewPager的高度?感謝您提前回復/評論!

+0

使用此:https://github.com/rnevet/WCViewPager,它是處理WRAP_CONTENT和動態變化的高度ViewPager。 – Raanan

+0

@Raanan我已經嘗試過,但它不適用於我的情況。 – ywwynm

回答

0

答案是:在設置params.height後,我應該打電話mViewPager.requestLayout()立即進行更改。

在許多情況下,View#requestLayout()View#setLayoutParams()不需要。但是這一次,其中一個應該出現。