在ListView上实现子更改。 OnHierarchyChangeListener?

时间:2014-02-16 11:23:31

标签: android listview listener android-view

我扩展了一个ListView,我想跟踪它的孩子的高度(并将其放入字典中)。但是implements OnHierarchyChangeListener不起作用。我使用了错误的听众还是错过了什么?

public class ObservableListView extends ListView implements OnHierarchyChangeListener {
    //constructors
    private Dictionary<Integer, Integer> listViewItemHeights = new Hashtable<Integer, Integer>();

    private void updateItemHeights(){    
        System.out.println("updating items");           
        for (int i = 0; i < this.getCount(); ++i) {
            View c = getChildAt(i);
            if(c!=null)
                listViewItemHeights.put(this.getFirstVisiblePosition(), c.getHeight());         
        }           
    }

    @Override
    public void onChildViewAdded(View arg0, View arg1) {
        updateItemHeights();
    }    

    @Override
    public void onChildViewRemoved(View arg0, View arg1) {
        updateItemHeights();
    }

    //Other methods
}

1 个答案:

答案 0 :(得分:0)

你需要实际设置监听器,我建议你在ListView类的构造函数中做这个(所有这三个,只是为了安全):

public ObservableListView(Context context){
    super(context);
    prepareView();
}

public ObservableListView(Context context, AttributeSet attrs){
    super(context, attrs);
    prepareView();
} 

public ObservableListView(Context context, AttributeSet attrs, Map params){
    super(context, attrs, params);
    prepareView();
} 

private void prepareView(){
    setOnHierarchyChangedListener(this);
}

只需将此代码复制到您的ObservableListView类中,就在updateItemHeights之前,它应该可以正常工作。