2012-12-17 68 views
0

我使用一個ListView從光標在屏幕上的兩個TextView顯示的信息的三個列。左側的TextView是靜態的,而右側的則是以兩種語言進行翻譯,當選擇時切換。動態更改的ListView元件

我的問題是,直到我滾動的ListView,此時適配器和ListView控件似乎變得不同步,導致片狀行爲,最後一個空指針異常能正常工作。

這裏的onListItemClick代碼:

public void onListItemClick(ListView l, View v, int position, long id){ 
    //first revert previous selection to English 
    if(previous_position!=99){ 
     View vo =l.getChildAt(previous_position); 
     TextView pt = (TextView)vo.findViewById(R.id.english); 
     pt.setTextColor(Color.BLUE); 
     pt.setText(previous_text); 
    } 

    //now show current selection in Hindi 
    TextView t = (TextView) v.findViewById(R.id.translation); 
    t.setTextColor(Color.RED); 
    t.setText(gloCursor.getString(3)); 

    //finally remember where we changed things so we can revert them 
    previous_position = position; 
    previous_text = gloCursor.getString(3); 

    // adapter data notification 
    //adapter.notifyDataSetChanged(); 
    } 

我註釋掉notifyDataStateChanged,因爲它並沒有在這種情況下,爲我工作。

希望任何有識之士或者一個更好的設計這一點。

感謝, P.

+1

,如果你做你的代碼未精縮 – jamis0n

回答

0

嘗試更換您的getChildAt代碼:

View vo = l.getChildAt(previous_position - l.getFirstVisiblePosition()); 
+0

沒有運氣這一點無論這將有助於。當我滾過第一個屏幕時仍然出現錯誤和錯誤。屏幕上的ListView和適配器中的模型之間的映射使我很難做到我想要的。 –

+0

如果您有錯誤,請發佈。另一種可能更可靠的方法是在適配器內部進行這些更改。 – mango

+0

感謝芒果的幫助。我使用的適配器來獲取視圖但然後直接將光標得到我想要交換的價值。相反,我可以在適配器的所有三列帶來,只是拉我想要的列。將嘗試,看看我在哪裏。 –