注:listview子项item中注意强抢焦点问题:
如果item子项是一个控件,设置控件的一个属性 android:focusable="false",
如果是布局的话,就在跟布局设置 android:descendantFocusability="blocksDescendants"
当时我自己的item中存在Button 我在其属性加入android:clickable="false",android:focusable="false", android:focusableInTouchMode="false"
三条属性
方法一:
在listview添加头部 ,这是最好的解决办法 数据加载量大的时候可以防止内存泄漏
onCreateView()方法里加载头部布局
head_listview布局是自己加入的布局
View v=inflater.inflate(R.layout.head_listview, null);
listv_dh_activitis.addHeaderView(v);
主布局只需要加入
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
方法二:
自定义ListView,重写onMeasure()方法写上下面的代码
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
方法三: 需要计算listview每个item的高
public static void setListViewHeight(ListView listviewli) {
// 获得ListView的适配器
ListAdapter adapter = listviewli.getAdapter();
if (adapter == null)
return;
int height = 0;
for (int i = 0; i < adapter.getCount(); i++) {
// 单个Item
View listViewItem = adapter.getView(i, null, listviewli);
// 计算宽高
listViewItem.measure(0, 0);
// 叠加没一个子项的宽高
height += listViewItem.getMeasuredHeight();
}
// 设置高度
ViewGroup.LayoutParams params = listviewli.getLayoutParams();
// Item的高度加上分割线的高度的和乘以总个数
params.height = height + ((listviewli.getDividerHeight()) * (adapter.getCount() - 1));
listviewli.setLayoutParams(params);
}
然后用listview方法调用即可