2011-06-15 59 views
0

我在我的ListActivity中有一個ListView,它用適配器充氣。有一個Handler和我呼籲它的postDelayed()方法運行遞歸ListView(在notifyDataSetChanged()的幫助下)。 postDealyed()設置爲1秒。在列表視圖中更改「listitem」引用

現在,有ContextMenusListView的所有項目/行。

我想從它的ContextMenu使用此代碼(剛剛接到「longpressed」行/項目的位置)單獨設置一個行的/項的背景:

public boolean onContextItemSelected(MenuItem item) { 
     AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    ... 
    case R.id.highlight: 
     ListView lv = (ListView)getListView(); 
     View row = (View) lv.getChildAt(info.position); 
     row.setBackgroundColor(Color.argb(255, 22, 100, 100)); 
     return true; 
    ... 

當我運行應用程序選定行的背景會發生變化(因爲它應該),但是每隔一秒(因此在每次刷新ListView時)其中的另一行會發生變化,並且所選行會變回其原始狀態。又過了一秒,一切都改變了。如果我滑過ListView的行,其他行也會閃爍。就像參考文獻正在改變或者我真的不知道。如果我停止滑動閃光背景有一個模式,直到下一張幻燈片,當它獲得另一種模式。

任何想法? 在此先感謝!

回答

1

這是因爲您的視圖正在回收。您的「突出顯示」代碼需要更新列表項目的支持模型,並將其「突出顯示」屬性設置爲true,但不應直接更改視圖。當你渲染你的物品(在你的適配器中)時,你檢查這個屬性是否爲true,如果是,那麼使用你指定的背景,否則將其設置回默認值。

+0

嗯,我認爲它會解決問題,但我已經編輯了代碼,正如你所建議的那樣,問題依然存在。現在適配器檢查行是否需要另一個背景。如果它需要適配器用setBackgroundColor覆蓋背景。如果我滑動ListView同樣華麗的事情仍然存在。 – IBoS 2011-06-16 11:21:46

+0

但是,如果我覆蓋背景不只是爲了需要突出顯示的行,而是爲適配器中的所有行(例如對於其他人爲黑色),它將工作,但是然後我鬆開了行的原始onlongpress視覺行爲。我知道我可以將它們更改爲與之前相同,但如果我不必設置其他行的背景,則會更好。 – IBoS 2011-06-16 11:22:29

+0

無論如何,我把代碼移動到了適配器,並且不僅設置了一個convertViews,而且還設置了其他背景/選擇器等。取決於是否需要突出顯示。 – IBoS 2011-06-16 17:49:54