2016-08-22 17 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 ' –