2012-08-13 74 views
1

ListView在調用notifyDataSetChanged();時似乎沒有刷新,但在其適配器重新設置時刷新。ListView不會刷新notifyDataSetChanged

在我的活動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不工作,它每次刷新它時,都會使我的列表視圖跳轉到開頭。

編輯:

爲了澄清的事情,我加入更值myIntegers。

+0

我們可以看到修改現有適配器的代碼嗎?您是否通過調用其方法來更改適配器?或者你在修改myIntegers數據集? – Joel 2012-08-13 22:55:01

+0

即時向myIntegers添加更多值 – 2012-08-13 22:58:12

+0

嘗試使用adapter.add()方法添加值。我不認爲你可以修改用於創建適配器的數組,然後期望它保存更新的實例來更新視圖。 – Joel 2012-08-13 23:00:54

回答

5

嘗試改爲使用adapter.add()方法添加值。我不認爲你可以修改用於創建適配器的數組,然後期望它保存更新的實例來更新視圖。運氣最好!

+0

'adapter.clear()'不會強制適配器意識到應該刷新視圖,但是'adapter.add()'或'adapter.addAll()'會引起混淆。儘管謝謝你的回答! – w3bshark 2015-08-01 18:24:24