android - ListView 不会在 notifyDataSetChanged 上刷新

标签 android listview adapter

ListView 在调用 notifyDataSetChanged(); 时似乎不会刷新,但在其适配器再次设置时会刷新。

在我的 Activity onCreate 中,我初始化了我的 ListView 和我的适配器。然后我有这个 Hanler 每秒检查一次新值。 listview.setAdapter(arrayAdapter); 有效,但 arrayAdapter.notifyDataSetChanged(); 不执行任何操作。

代码如下:

    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

                     lv = (ListView) findViewById(R.id.listView1);

            arrayAdapter = new ArrayAdapter<Integer>(this,android.R.layout. simple_list_item_1, myIntegers);
            lv.setAdapter(arrayAdapter);
    }

    private Handler handler = new Handler() {

            @Override
            public void handleMessage(Message msg) {
                if (msg.what == DIS){
                    handler.sendEmptyMessageDelayed(DIS, 1000);
                    if(!refresh()){
                        handler.removeMessages(DIS);
                    }
                }
            }
        };

   public boolean refresh(){

        if(ports.isEmpty()){
            return false;
        }else{
            listview.setAdapter(arrayAdapter); //WORKS
    arrayAdapter.notifyDataSetChanged(); // DOESN'T WORK
            return true;
            }
    }

所以我想知道如何使用 notifyDataSetChanged 实现它,因为我读到这是正确的方法,而且即使 setAdapter 确实有效每次刷新时,它都会让我的 ListView 跳转到开头。

编辑:

为了澄清问题,我向 myIntegers 添加了更多值。

最佳答案

尝试使用 adapter.add() 方法添加值。我不认为您可以修改用于创建适配器的数组,然后期望它保存一个更新的实例来更新 View 。祝你好运!

关于android - ListView 不会在 notifyDataSetChanged 上刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11943365/

相关文章:

java - 如何使用后台线程检查套接字是否已连接

Android以编程方式设置文本样式

java - 来自 CursorWindow 的 java.lang.IllegalStateException : Couldn't read row 0, col -1

android - 多个 Intent 的 onActivityResult

android - 将 ImageView 添加到 ListActivity

wpf - WPF MVVM ListView不更新!

Android listview onselect item有两个值,如何分别获取

android - 为一个适配器禁用 onItemClickListener?

android - 我如何选择要重用的 convertview?

Android ListView 缓冲区