2013-09-24 192 views
0

我有這種特殊的需要的項目範圍:更改背景顏色的ListView

當我點擊一個Button,我ListView的一些項目應該強調 - 通常是一個行或行範圍,而不是隨機元素 - 通過改變背景顏色。 Android提供這樣的功能嗎? 我想在我的自定義適配器中添加一個方法來設置一個行範圍,然後在getView方法中添加一個檢查來決定是設置標準還是高亮背景,並最終通知適配器數據已更改,但我很確定有些東西可以在不重新填充整個ListView的情況下實現。

我知道多重選擇,但我認爲它是完全不同的,不是嗎?

更新:使用list.getChildAt(pos).setBackgroundColor(Color.BLUE);我得到一個NullPointerException因爲它只含有可見的孩子,不是所有的項目。沒有其他解決方案嗎?

UPDATE2:查看我的回答。

回答

0

我的解決辦法:

在MyAdapter類:

private boolean highlighted = false; 
private Integer from, to; 
//.... 
public void setHighlight(int from, int to) { 
    if ((this.from != null && this.from == from) && (this.to != null && this.to == to)) { 
     highlighted = false; 
     this.from = null; 
     this.to = null; 
    } else { 
     highlighted = true; 
     this.from = from; 
     this.to = to; 
    } 
} 
//... 
@Override 
public View getView(int pos, View v, ViewGroup vg) { 
    parsedLine entry = lines.get(pos); 
    //... 
    if (highlighted && pos>=from && pos<=to){ 
     v.setBackgroundColor(Color.parseColor(Theme.getHighlightColor())); 
    } 
    //... 
    return v; 
} 

那麼無論我想強調一些行:

MyAdapter myadapter = (MyAdapter)mylist.getAdapter(); 
myadapter.setHighlight(from, to); 
myadapter.notifyDataSetChanged(); 
mylist.setSelection(from); 
1

使用以下代碼突出顯示按鈕被按下時的列表項。 將此代碼放在按鈕的onClick事件上。

listview.getChildAt(position).setBackgroundColor(Color.BLUE); 
+0

我在那條線上得到一個NullPointerException,儘管我可以看到列表視圖並且它已經被填充了。我擔心發生這種情況的原因是,我試圖編輯的孩子在屏幕上不可見,但需要通過使其可見才能初始化,即使之前添加setSelection(pos)不起作用。 – Vektor88

+0

請發佈您的listview和logcat輸出的代碼。 –

+0

嘗試打印您的edittext值,看看您得到了什麼,然後將最終的EditText輸入= new EditText(getApplicationContext())更改爲最終的EditText輸入= new EditText(YourActivity.this) 然後運行您的程序。 –

-1

@ Vektor88 - 請嘗試更改一次

final EditText input = new EditText(CLASSNAME.this); 
+0

這是相同的,文本是有效的,它崩潰,一旦我點擊確定,它試圖改變顏色,因爲它只適用於可見項目。如果我有1500多行,那麼android不可能將它們全部顯示出來。 – Vektor88