2013-08-07 44 views
1

與適配器爲Android的ListView一個令人沮喪的問題的Android的ListView adapter.notifyDataSetChanged有時工作,有時不

我有這一塊的代碼:

@Override 
public void onClick(View v, MotionEvent event, int position) { 
    int value = dice.get(position).roll(); 
    adapter.notifyDataSetChanged(); 
    Toast.makeText(getApplicationContext(), "Click on "+position + " | Output: "+value, Toast.LENGTH_SHORT).show(); 
} 

哪裏dice是定製的ArrayList對象和adapterArrayAdapter的擴展。 Toast是總是單擊視圖時可見,但ListView只是偶爾更新。我看不到任何模式;有時點擊上的視圖更新,有時在2或3之後。

任何想法?謝謝

+1

[This answer](http://stackoverflow.com/questions/3669325/notifydatasetchanged-example/5092426#5092426)可能有幫助... – neo108

+0

http://stackoverflow.com/questions/17292256/notifydatasetchanged-without-清爽最UI/17292468#17292468。如果有幫助,請參閱 –

回答

0

嘗試listview.invalidate()或l istview.invalidateViews(),它可能會在你的情況。

0

listview.invalidate()可能會有所幫助。

0
@Override 
public void onClick(View v, MotionEvent event, int position) { 
    int value = dice.get(position).roll(); 
    dice.get(position).setValue(value); // Where setValue I hope is a method to set value of a item 
    adapter.notifyDataSetChanged(); 
    Toast.makeText(getApplicationContext(), "Click on "+position + " | Output: "+value,  Toast.LENGTH_SHORT).show(); 
} 

只是爲了澄清,你必須改變一些值調用notifydatachanged之前,所以你必須確保新的值設置爲你的骰子項目

+0

.roll()更改對象的值,並返回結果。該適配器有一個「骰子」的引用,所以它有時會改變...。 –

0

我最後不得不重建ViewHolder的壓每次觸發onClick時,查看我的自定義ArrayAdapter的內部。

原始挫折的來源(爲什麼有時Android會自動處理,有時它不會)我仍然不確定。

相關問題