我扩展了一个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
}
答案 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之前,它应该可以正常工作。