2012-11-25 205 views
0

我有佈局具有expandablelistview。而且,每個子項都有GridView。但gridview有自己的滾動和expandablelistview也有。所以我必須爲所有gridview設置固定的長度,但是有動態數量的gridviews。禁用gridview滾動

我發現從here單gridview的解決方案。

private OnGlobalLayoutListener mOnGlobalLayoutGridListener = new OnGlobalLayoutListener() { 

    @SuppressWarnings("deprecation") 
    @Override 
    public void onGlobalLayout() { 

     Debug.e("", "onGlobalLayout is called"); 

     if (gridView != null && gridView.getChildCount() > 0) { 

      gridView.getViewTreeObserver().removeGlobalOnLayoutListener(
        this); 

      // gridView.get 

      View lastChild = gridView 
        .getChildAt(gridView.getChildCount() - 1); 

      int rows = gridView.getAdapter().getCount()/numColumns; 
      int extra = gridView.getAdapter().getCount() % numColumns; 

      if (extra > 0) { 
       rows++; 
      } 

      int height = (int) (lastChild.getMeasuredHeight() * rows); 

      gridView.setLayoutParams(new LinearLayout.LayoutParams(
        LayoutParams.MATCH_PARENT, height)); 
     } 

    } 
}; 

OnGlobalLayoutListener不引用特定的GridView。所以我不能將這個監聽器用於所有的gridviews,因爲所有gridview都有不同數量的項目。

看到這裏

enter image description here

誰能幫助我? 在此先感謝。

+0

AFAIK另一個可滾動項目內的可滾動項目在Android中不起作用。 – Ixx

+0

我知道,這就是爲什麼OnGlobalLayoutListener用於設置gridview的結束長度的原因。但我面臨着多個gridview的問題。問題是如何管理多個OnGlobalLayoutListener。 –

回答

0

您可以使用自定義的GridView這樣,那麼你就不必設置固定長度爲所有的GridView:

公共類GridlistView擴展的GridView {

public GridlistView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 


public void onMeasure(int widthMeasureSpec,int heightMeasureSpec) { 
    int expendSpec=MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2, MeasureSpec.AT_MOST); 
    super.onMeasure(widthMeasureSpec, expendSpec); 
} 

}

使用GridListView在你的xml中;