背景: 我在做项目的时候准备用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