作为开发的小牛犊.我只是想记录下自己开发中遇到的问题,已经解决办法!—留给自己看就行了.
一、今天遇到了ListView在自适应扩充高度时候出现的问题.
1.网上查的很多,都是说写个Util类,来自扩充Listview的高度.但是,一旦这个Listview是嵌套在ScorllView里的,那么ListView和ScorllView的滑动会冲突.导致Listview只显示一小行.
最初的时候,我是给Listview的Adapter设置了Minheight.但是Item里的文本(TextView一旦多了.)就会导致显示文字不全.
在这里要说明下,要想全部高度显示,textview和父布局文件必须:wrap_content
废话不多说了,上代码了.
网上有很多说明了,但是作为小白,可能不知道怎么做.
一、,就是要重新自定义一个Listview.继承ListView.重写其中的onMeasure方法.
因为ListView扩展时因为很多原因,可能达不到完美的效果.
*在写第三个MyListView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}的时候,AS会提示API兼容的问题.*
自动调整下就OK了.
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ListView;
/**
* Created by win on 2016/3/25.
*/
public class MyListView extends ListView{
public MyListView(Context context) {
super(context);
}
public MyListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public MyListView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
这是在ListViewUtil里写的方法.
/**
* 动态设置ListView的高度
*
* @param listView
*/
public static void setListViewHeightBasedOnChildren(ListView listView, ListAdapter adapter) {
if (listView == null) return;
if (adapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < adapter.getCount(); i++) {
View listItem = adapter.getView(i, null, listView);
listItem.measure(0, 0);//计算每项 Item的高度
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (adapter.getCount() - 1));
//循环完之后,要计算出getDividerHeight(空白处占得height) 才是Listview的高度
listView.setLayoutParams(params);
}
然后是最后一步:
一定要在获取数据后:
adapter = new MyListAdapter(this, CommentmData);
mListView.setAdapter(adapter);
ListViewUtil.setListViewHeightBasedOnChildren(mListView, adapter);
还可能牵扯到更新Adapter后的数据变动,也要调用该方法.
ListViewUtil.setListViewHeightBasedOnChildren(mListView, adapter);
/*** mListView 就是你布局里那个Listview....adapter就是适配Listview的Adapter **/
OK了,小生第一篇博客.写的不好,请各位大神指点.只是想学点记录点.好记性不如烂笔头!!!