2016-08-22 44 views
0

adapter.notifyDataSetChanged();是不是在Android中工作我正在檢索for循環中的值,但值不顯示在屏幕上。 我的Java文件:NotifyDataSetChanged在我的代碼中不起作用

private static final String TAG_NAME="Notification"; 
String[] resultsAsString = {""}; 
ListView listView; 
ArrayAdapter<String> adapter; 
adapter = new ArrayAdapter<String>(this, 
    android.R.layout.simple_list_item_1, resultsAsString); 
    ParseQuery<ParseObject> parseObjectParseQuery=new ParseQuery<ParseObject>("PushNotifications"); 
    parseObjectParseQuery.findInBackground(new FindCallback<ParseObject>() { 
     @Override 
     public void done(List<ParseObject> objects, ParseException e) { 
      if (e==null){ 
       resultsAsString = new String[objects.size()]; 
       Log.d(TAG_NAME,"Objects size in MyService is:"+objects.size()); 

       if(objects.size()>0){ 
        Log.d(TAG_NAME,"Object size is "+objects.size()); 
        for(int index = 0; index < objects.size(); index++){ 
         resultsAsString[index] = objects.get(index).getString("Message"); 
         Log.d(TAG_NAME,"result value is:"+resultsAsString[index]); 
        } 
        adapter.notifyDataSetChanged(); 
       }else { 
        Log.d(TAG_NAME,"Object size is "+objects.size()); 
       } 
      } 
     } 
    }); 
listView = (ListView) findViewById(R.id.notificatio_listView); 
listView.setAdapter(adapter); 

我的logcat顯示: 對象大小爲MyService是:3 對象大小爲3 第一Nottification 第二消息 第三則消息

+0

你確定objects.size()是> 0嗎? – Opiatefuchs

+0

我確信對象大小是3,我可以查看for循環 –

+0

和...通常,在將適配器設置爲listView後調用adapterNotifyDataSetChanged()...... – Opiatefuchs

回答

7

您創建了一個全新的數組,並將其未連接到適配器。

resultsAsString = new String[objects.size()]; 

通知不起作用,但您不再在適配器中引用該數據集以更新它。該適配器仍然保持在初始的空字符串數組

我建議你使用Arraylist和簡單的adapter.add填寫數據。就這樣,沒有必要通知

而且還除非你想重複數據


或者使用adapter.clear的解析結果完成時,只是做一個新的適配器,並重新設置它的ListView控件

+1

之後發生,因爲數據被添加到新數組,所以notifyDataSetChanged()仍然在最初傳遞的數組上保持空着。 – Yazan

+0

嗨cricket_007,感謝您的回答,我現在應該使用Arraylist還是適配器? –

+0

這是兩件不同的事情。 ArrayList存儲在適配器內部。就像你的'String []'...所以用'ArrayList ' –