2014-09-04 140 views
4

我正在嘗試創建可摺疊的日曆。ViewPager with expandable child

我在ViewPager中使用自定義的calendarView,所以當展開/摺疊按鈕按下我的calendarView動畫時,摺疊所有日曆周(除了只有一個)。

目標是在擴展時滑動月份(按照我的需要工作),並在摺疊時刷卡幾周。

在calendarView下面是ListView的一些事件,當用戶摺疊日曆時--listView的高度必須改變。

問題是當我試圖在ViewPager中摺疊calendarView時,他不改變高度。

calendarView是一個帶有子視圖的LinearLayout,當它不在ViewPager中時,它會動畫並更改大小。

我使用小片段來ViewPager高度設置爲它的孩子

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 

    int height = 0; 
    for(int i = 0; i < getChildCount(); i++) { 
     View child = getChildAt(i); 
     child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
     int h = child.getMeasuredHeight(); 
     if(h > height) height = h; 
    } 

    heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); 

    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 

我試圖重寫onMeasure上calendarView,使用了不同的動畫,試圖直接改變ViewPager佈局,但沒有運氣。

請幫我解決這個問題,也許有一個提示吧。

我發現thisthisthis,以及更多的問題

我的問題是非常相似的this問題

回答

6

所以最後我想通了,如何解決我的問題,也許這將是有益的。

這裏是我的PagerAdapter:

class CustomAdapter extends PagerAdapter { 

    private View mCurrentView; 

    ... 

    // Saving current active item 
    @Override 
    public void setPrimaryItem(ViewGroup container, int position, Object object) { 
     mCurrentView = (View) object; 
    } 

    public View getCurrentItem() { 
     return mCurrentView; 
    } 

} 

這是我ViewPager類

class CustomViewPager extends ViewPager { 

    private CustomViewPagerAdapter mAdapter; 

    ... 

    // Set ViewPager height to currentItem 
    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 

     int height = 0; 
     View v = mAdapter.getCurrentItem(); 
     if(v != null) { 
      v.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
      height = v.getMeasuredHeight(); 
     } 

     heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); 

     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    } 
} 

有了這個,我可以摺疊/展開ViewPager孩子的,這將是正確測量它的高度,它的措施當頁面稍微延遲改變時。

+0

非常感謝,您的解決方案確實有幫助。修改它有點與FragmentPagerAdpter一起工作。 – 2015-07-20 06:04:12

+0

嘿,我想嘗試你的解決方案,但我想知道如何使用你的適配器,謝謝 – Tony 2016-02-24 14:26:00

+0

一如既往地使用你的尋呼機適配器只需添加我上面提供的代碼。 – Jonez 2016-02-25 16:16:25