Android ListView adapter.notifyDataSetChanged有时会起作用,有时却不起作用

时间:2013-08-07 03:55:18

标签: android listview adapter notifydatasetchanged

Android ListView适配器的问题令人沮丧

我有这段代码:

@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之后。

有什么想法吗?感谢

4 个答案:

答案 0 :(得分:0)

尝试listview.invalidate()或l istview.invalidateViews(),它可能适合您的情况。

答案 1 :(得分:0)

listview.invalidate()可能有帮助。

答案 2 :(得分: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之前改变一些值,所以你必须确保为你的骰子项设置新值

答案 3 :(得分:0)

每次触发onClick时,我最终都需要为自定义ArrayAdapter中的按下View重建ViewHolder。

原始挫折的根源(为什么有时候Android会自动处理这种情况,有时却不会这样做)对我来说仍然不确定。