ListView的使用
属性介绍:
判断ListView的第一个item是否完全显示出来
以下内容来自: https://blog.csdn.net/zhang_duo/article/details/20942703
if (mListView.getFirstVisiblePosition() == 0){
// 当前显示出来的第一项就是所有item中的第一项,下面判断是否完全显示
if (mListView.getChildAt(0).getTop() >= 0) {
// 第一项完全显示出来
}
}
//也可以写成这样:
if (mListView.getChildCount() > 0 && mListView.getFirstVisiblePosition() == 0 && mListView.getChildAt(0).getTop() >= 0) {
return true;
}
说明:
ListView.getChildCount()
返回的是这个listView当前显示出来的item数量,也就是在屏幕上可以看到的数量。
ListView.getChildAt(int pos)
返回的是这个listView当前显示出来的item中的第pos项,也就是说索引是从显示出来的第一项开始计算的,如果屏幕上方有n个item看不见,那么这个函数的返回值就是n
ListView.getFirstVisiblePosition()
返回值是当前可以看到的第一个item,在所有item中(包括看不到的)的位置。
View.getTop()
返回值是这个View相对于它的父控件的top值,对于item而言,如果item只有一半显示出来(下半部分),那么返回值应该是 - 这个item的高度
ListView - 嵌套问题
ScrollView里嵌套ListView导致ListView的item布局显示不全
/**
* creater : geaosu
*/
public class ExpandListView extends ListView {
public ExpandListView(Context context) {
super(context);
}
public ExpandListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ExpandListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public ExpandListView(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);
}
}
强烈推荐相关博客
地址: http://blog.csdn.net/hanhailong726188/article/details/46136569
他的csdn地址: http://blog.csdn.net/hanhailong726188
解决scrllView嵌套listview时, listview显示不全的问题
标签: geaosu android listView 嵌套
/**
* 描述 : 解决scrllView嵌套listview时, listview显示不全的问题;
* 使用 : 在listView设置了adapter后调用, 传入当前的listview对象;
**/
public static void setListViewHeightBasedOnChildren(ListView listView) {
// 获取ListView对应的Adapter
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0, len = listAdapter.getCount(); i < len; i++) { // listAdapter.getCount()返回数据项的数目
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0); // 计算子项View 的宽高
totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight
+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
// listView.getDividerHeight()获取子项间分隔符占用的高度
// params.height最后得到整个ListView完整显示需要的高度
listView.setLayoutParams(params);
}
动态控制listview显示条目的数量
参考博客:
网友评论