我想更新我的按鈕ListView
。我目前的代碼工作正常,但有一個小故障,當到達最後一個項目時,它突然更新第一個項目,因爲它是最後一篇文章中的錯誤數據。我不知道發生了什麼,在我的日誌我什麼都沒有得到,表明第一個項目正在更新。 我從similar question得到了這段代碼和想法。更新ListView中的按鈕
這裏是我使用的代碼:
/**
* Updates the like/dislike button states
*/
public void updateButtons() {
ListView lv = ((ListView) findViewById(R.id.post_list));
Log.d("Child Count: ", Integer.toString(lv.getCount()));
int firstVisible;
int child;
for(int i=0; i < lv.getCount(); i++) {
firstVisible = lv.getFirstVisiblePosition() - lv.getHeaderViewsCount();
child = i - firstVisible;
if(child < 0 || child >= lv.getChildCount()) {
continue;
}
if(updated.contains(i)) continue;
Log.d("Debug", "Updating child:" + Integer.toString(child));
LinearLayout row = (LinearLayout) lv.getChildAt(child);
if(likeable.get(i) == 0) {
LinearLayout btn = (LinearLayout) row.findViewById(R.id.btn_like);
btn.setClickable(false);
ImageView imgView = (ImageView) row.findViewById(R.id.img_like);
imgView.setImageDrawable(getResources().getDrawable(R.drawable.ic_like_selected));
TextView txtView = (TextView) row.findViewById(R.id.text_like);
txtView.setTextColor(Color.parseColor("#60007c"));
}
if(dislikeable.get(i) == 0) {
LinearLayout btn = (LinearLayout) row.findViewById(R.id.btn_dislike);
btn.setClickable(false);
ImageView imgView = (ImageView) row.findViewById(R.id.img_dislike);
imgView.setImageDrawable(getResources().getDrawable(R.drawable.ic_dislike_selected));
TextView txtView = (TextView) row.findViewById(R.id.text_dislike);
txtView.setTextColor(Color.parseColor("#60007c"));
}
Log.d("Debug", "Adding child" + Integer.toString(i) + "TO the updated list");
updated.add(i);
}
}
我每次運行此代碼的用戶滾動列表視圖:
ListView lv = ((ListView) findViewById(R.id.post_list));
lv.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
updateButtons();
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
updateButtons();
}
});
這不是一個錯誤,當您上下滾動時,ListView會循環使用行,您應該始終爲您對行進行的任何更改提供默認值。但這並不能解釋爲什麼它只發生在第一行。 – Luksprog
@Luksprog它發生在第一行,因爲我只有6個帖子。當滾動到最新的一個(因爲最新的一個太長),它覆蓋了我的所有屏幕,所以孩子0成爲帖子號碼6.當滾動到第一帖子時,它具有與第六帖子相同的設置。如果帖子更多,其他帖子也會發生。 –
但是,這太糟糕了,我必須不斷更新按鈕。這太多無用的進程。 –