2013-08-07 25 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会自动处理,有时它不会)我仍然不确定。