2016-09-23 11 views
0

拡張可能なリストビューの高さを計算しようとしているので、ヘッダーを含むすべてのアイテムを表示できるので、コンテンツを見るためにスクロールする必要はありません。Height ExpandableListViewの計算に関する問題

これは、リストビューを表示する部分です。その隣にカレンダーです:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/scrollLayout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fillViewport="true" 
android:orientation="vertical"> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context=".fragments.DashboardFragment"> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     tools:context=".fragments.DashboardFragment"> 
     <ExpandableListView 
      android:id="@+id/lvExp" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 
     <CalendarView 
      android:id="@+id/calendarView" 
      android:layout_width="match_parent" 
      android:layout_height="292dp" /> 
    </LinearLayout> 
</LinearLayout> 

私はフラグメントに位置setOnGroupExpandListenerで高さを計算しています。最初のiはヘッダの二人の子供の高さを取得全ての:

height += ((expListView.getChildAt(0).getHeight()+expListView.getDividerHeight())-expListView.getDividerHeight())*listAdapter.getGroupCount(); 

、私は次の式を使用して子供の高さを計算する:私は最初のグループを展開すると

for (int i = 0; i < listAdapter.getGroupCount();i++){ 
if (expListView.isGroupExpanded(i)){   
    height += listAdapter.getChildrenCount(i)*(expListView.getChildAt(0).getHeight()+expListView.getDividerHeight())-expListView.getDividerHeight();   
} 
} 

ギャップでありますリストビューとカレンダーの間に配置されます。私が第2のグループを拡張するとき、それらの間にはより大きなギャップが置かれる。

私はそれらを崩壊するために同じ数式を持っています。

高さを計算するために別の公式を使用すべきですか?

All items collapsed

First item expanded

All items expanded

答えて

1

あなたはすべてでこれを行うべきではありません。リストビューのポイントはスクロールすることです。スクロールしたくない場合は、ビューとしてLinearLayoutに追加するだけです。

アルゴリズムに関しては、動作しません。 ListViewは、現在オンスクリーンでない限り、アイテムの高さを認識しません。したがって、実際にはこれを計算することはできません。

また、すべてのビューの高さは計算されません。リストビューは画面上のアイテムの子のみを持ちます。彼らはそれらの間でアイテムをリサイクルします。したがって、あなたのアルゴリズムは、現在画面上の項目の高さのみを取得します。

+0

問題は、アイテムのリストを表示する必要があり、展開/折りたたむ必要があり、私が見つけた唯一の解決策は、展開可能なリストビューを使用していたことです。あなたが別の解決策を知っていれば、私は非常に感謝しています – n4h1n

+0

拡張可能なリストビューは、スクロールが必要な(または少なくとも気にしない)限り、それにはいいです。スクロールしたくない場合は、リストビューの形式を使用したくないです。その時点であなた自身のビューを書く時間。あなたの例を見ても、私はスクロールが完全に適切だと思う。 –