背景: 我在做項目的時候準備用listview嵌套一個listview,但是發現,子listview只顯示一條數據,於是,一猜又是計算高度出問題了。
處理辦法,當然是和scrollview嵌套listview類似的,去重新計算一下高度。
下面是我封裝成了工具類,方便隨時使用:
使用方法是,在子的childListview.setAdapter(adapter);之後再調用這個工具類setListViewHeightBasedOnChildren(childListview);即可解決問題。
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.ListView;
/**
* <p>ListView處理的工具類,防止ListView嵌套時,內部ListView顯示不完全</p>
*
* <p>注意:該方法只能在ListView中Item爲線性佈局的時候有效,因爲線性佈局有onMesure()方法。</p>
*
* @author whwei
*
*/
public class ListViewUtil {
public static void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
}
2016.4.24