自定义viewgroup获取包裹的listview

本文介绍了一种在自定义ViewGroup中获取其内部ListView实例的方法。通过重写onLayout方法并在其中调用getListView方法来实现这一目标,确保了ListView正确加载。
     先在viewGroup里面定义一个方法,用于获取放在viewGroup中的listview

private void getListView() {
    int childs = this.getChildCount();
    if (childs > 0) {
        for (int i = 0i < childsi++) {
            View childView = getChildAt(i);
            if (childView instanceof ListView) {
                mListView = (ListView) childView;
            }
        }
    }
}
 
解释一下这段代码:
     首先获取viewGroup子view的数量,然后根据数量判断是否有子view,如果有,则遍历子view获取其中class为ListView(可以是你任意想要获取view的类,前提是你已经把该view放到viewGroup中)的子view。

接下来很重要!!!
     我们这个方法是放在viewGroup的类里面的,但要在viewGroup的什么地方走这个方法呢?我试过放到构造方法里面,例如:

public MyPtrRefresh_LoadView(Context contextAttributeSet attrs) {
    super(contextattrs0);
    this.context = context;
    getListView();
}
 
     这是将代码放到viewGroup的第二个构造方法中执行,经测试发现完全获取不到listView。经过一番百度google之后,我发现需要将方法放到viewGroup重写的onLayout方法里面运行,就能获取listview

@Override
protected void onLayout(boolean changed, int left, int top, int right,
                        int bottom) {
    super.onLayout(changedlefttoprightbottom);
    // 初始化ListView对象
    if (mListView == null) {
        getListView();
    }
}

onLayout方法是ViewGroup中子View的布局方法,用于放置子View的位置。放置子View很简单,只需在重写onLayout方法,然后获取子View的实例,调用 子View的layout方法实现布局。在实际开发中,一般要配合onMeasure测量方法一起使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值