0
我有一個列表視圖,其中有一些行在屏幕上。當我在列表的底部時,列表的第0位(即第一項)不在屏幕上。我需要改變第一行的背景顏色,但爲了獲得對視圖的引用,我必須使用getAdapter.getView(),並且當我設置背景顏色時,它不會改變。如何更改從getApadpter()getView返回的ListView的行值?
我先試着平滑滾動的立場,要求改變背景顏色,但仍然沒有運氣的方法:
if(position == 0) {
mailList.smoothScrollToPosition(0);
selectRow(0);
}
這是我改變背景顏色:
public void selectRow(int position){
// Get the row
View row = getViewByPosition(position, mailList);
// Highlight background colour
row.setBackgroundColor(ContextCompat.getColor(activity, R.color.Pallette_Peach_CC));
// For every other row apart from 'position'
// Check if read/unread and set background colour
View v;
for(int i = 0; i < mailList.getCount(); i++){
if(i != position){
v = getViewByPosition(i, mailList);
if(Consts.mailBox.get(i).isRead()){
v.setBackgroundColor(ContextCompat.getColor(activity, R.color.Ivory_Transparent_55));
}else{
v.setBackgroundColor(ContextCompat.getColor(activity, R.color.Ivory_Transparent_77));
}
}
}
}
,這是我選擇行:
// returns a specific row
private View getViewByPosition(int pos, ListView listView) {
final int firstListItemPosition = listView.getFirstVisiblePosition();
final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;
if (pos < firstListItemPosition || pos > lastListItemPosition) {
return listView.getAdapter().getView(pos, null, listView);
} else {
final int childIndex = pos - firstListItemPosition;
return listView.getChildAt(childIndex);
}
}
它平滑滾動到後埔sition 0,背景不會像它應該那樣重新設置,但是當我移動到第1行時,背景會被設置。誰能幫我嗎?謝謝。
那麼簡單。這解決了我的問題,非常感謝! – Highway62