我getView
中的ArrayAdapter (BaseAdapter)
方法内有:
expand.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
updateOneRow(pos, (Integer)v.getTag());
}
});
其中 updateOneRow 是:
rcell.getLayoutParams().height = 250; // row height (r.layout)
expand.setVisibility(View.INVISIBLE);
collapse.setVisibility(View.VISIBLE);
if (mClickListener2 != null) {
mClickListener2.onBtnClick(tag);
}
mClickListener2 是一个传递给ArrayAdapter构造函数的对象,如下所示:
new BtnClickListener(){
@Override
public void onBtnClick(int position) {
updateItemAtPosition(position, buildingLV); // buildingLV is my list view
}
}
和 updateItemAtPosition 是:
private void updateItemAtPosition(int position, ListView mListView) {
int visiblePosition = mListView.getFirstVisiblePosition();
View view = mListView.getChildAt(position - visiblePosition);
mListView.getAdapter().getView(position, view, mListView);
}
答案 0 :(得分:2)
以下是为我工作的解决方案 -
假设您的getView方法中有其他代码 - 使用setTag添加对按钮对象的当前行的引用。
public View getView(int position, View convertView, ViewGroup parent) {
expandBtn.setTag(convertView);
expandBtn.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
View rowView = (View) v.getTag();
// update you view here.
rcell.getLayoutParams().height = 120;
collapsebtn.setVisibility(View.INVISIBLE);
// Update only this row now
}
});
return convertView;
}
答案 1 :(得分:0)
无论你对视图做什么都只是当前项目的一个..现在如果在某些情况下不应该是一个监听器...而你正在回收这些项目..记得删除监听器