2016-08-22 10 views
0

adapter.notifyDataSetChanged(); 안드로이드에서 작동하지 않습니다 for 루프에서 값을 검색하지만 값이 화면에 표시되지 않습니다. 내 자바 파일 :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); 

내 로그 캣 표시 : 객체이면 MyService의 크기 : 3 개체 크기는 새로운 배열을 생성하고

+0

objects.size()가> 0인지 확인 하시겠습니까? – Opiatefuchs

+0

그래, 개체 크기가 3이고 나는 루프 –

+0

및 ... 일반적으로, adapterView를 어댑터를 설정 한 후 adapterNotifyDataSetChanged()를 호출 할 수 있습니다 ...... – Opiatefuchs

답변

7

3 먼저 Nottification 두 번째 메시지 세 번째 메시지입니다 그것은 어댑터에 연결되어 있지 않습니다.

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

알림은 작동하지만 어댑터의 데이터 세트에 대한 참조가 더 이상 업데이트되지 않습니다. 어댑터가 여전히 초기 빈 문자열 배열을 잡고 있습니다.

Arraylist를 사용하고 데이터를 채우기 위해 간단히 adapter.add을 사용하는 것이 좋습니다. 그것으로, 구문 분석 결과가 완료되면 중복 데이터

또는

을 원하지 않는다면 adapter.clear을 사용하여도

을 통보하고 할 필요가 없습니다, 단지 새로운 어댑터를 확인하고 다시 ListView에에

을 설정할
+1

과 정확히 일치하기 때문에 notifyDataSetChanged()는 데이터가 새 배열에 추가되었으므로 원래 전달 된 배열에서 계속 작동합니다. – Yazan

+0

안녕하세요 cricket_007, 답장을 보내 주셔서 감사합니다. 지금 Arraylist 또는 어댑터를 사용해야하나요? –

+0

두 가지가 다릅니다. ArrayList는 어댑터 내부에 저장됩니다. 당신의'String []'처럼 ... ArrayList ' –

관련 문제