2017-02-12 1 views
-2

Ich könnte Hilfe mit diesem seltsamen Problem verwenden. Beim ersten Laden ist meine Listenansicht leer. Wenn ich klicke, um die Seite erneut zu laden, entweder indem ich zu einer anderen Aktivität gehe oder die gleiche Aktivität aktualisiere, wird meine Liste angezeigt. Irgendwelche Ideen? Vielen Dank.Adapter-Methode notifyDataSetChanged nicht erfrischend listview

Meine Variablen:

private static ArrayList<Media_Info> mediaIntroQueueList = new ArrayList<Media_Info>(); 
private static ArrayList<String> mediaIntroQueueListTitles = new ArrayList<>(); 
ArrayAdapter<String> stringAdapter; 
ListView mediaList; 

OnCreate: wo ich meine stringAdapter gesetzt

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_meet); 

    Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(myToolbar); 

    // LOG 
    Log.i("Constants", Constants.userID); 

    mediaList = (ListView) findViewById(R.id.mediaListView); 

    stringAdapter = new ArrayAdapter<>(
      this, 
      android.R.layout.simple_list_item_1, 
      mediaIntroQueueListTitles); 
    mediaList.setAdapter(stringAdapter); 


@Override 
protected void onStart() { 
    super.onStart(); 

    Log.i("ACTIVITY", "onStart"); 

    getUserLocation(); 

    getLocalIntroductions(); 

} 

private void getLocalIntroductions() { 

/// a bunch of firebase db calls 

       if (mediaLocationKeysWithinRadius.contains(mediaID)) { 

        Log.i("media within radius: ", mediaID); 
        newItems.add(mediaInfoDic); 
        newItemsTitles.add(title); 

        } 
       else { 
        Log.i("media not in radius: ", mediaID); 
       } 
      } 

      mediaIntroQueueList = newItems; 
      mediaIntroQueueListTitles = newItemsTitles; 

      stringAdapter.notifyDataSetChanged(); 
+0

Seht ihr die mediaId beim ersten Start angemeldet? Um ehrlich zu sein, ich bin überrascht, dass Sie irgendwelche Elemente in der Liste sehen, denn soweit ich sehen kann, fügen Sie niemals Elemente zu den Daten Ihres Adapters hinzu. Auch Ihr Code ist nicht vollständig –

+0

können Sie Ihren Code formatieren und sind Sie sicher, dass Sie 'stringAdapter.notifyDataSetChanged()' direkt nach der Aktualisierung Ihrer Datenmenge aufrufen? – Raghunandan

Antwort

0

Da Sie einen neuen Arraylist mediaIntroQueueListTitles zugeordnet. Sollte verwenden Sie add() direkt.

private void getLocalIntroductions() { 

    /// a bunch of firebase db calls 
    // Clear your ArrayLists if you need to 
    mediaIntroQueueList.clear(); 
    mediaIntroQueueListTitles.clear(); 
    if (mediaLocationKeysWithinRadius.contains(mediaID)) { 
     Log.i("media within radius: ", mediaID); 
     mediaIntroQueueList.add(mediaInfoDic); 
     mediaIntroQueueListTitles.add(title); 
    } 
    else { 
     Log.i("media not in radius: ", mediaID); 
    } 
    stringAdapter.notifyDataSetChanged(); 
} 
+0

Das ist meiner Meinung nach nicht das Problem, da der Verweis, den _adapter_ hatte, nun einer neuen Liste mit eigenen Elementen zugewiesen ist, also sollte 'notifyDataSetChanged()' die _ListView_ in Bezug auf eine neue Liste aktualisieren. –

+0

Ich habe diese geändert und das Problem für mich behoben. – makthrow

+0

@ShoaibAnwar, wenn Sie den Arraylist-Objekten eine neue Arraylist zuweisen. Der Adapter verliert den Verweis auf Ihre Liste und notifyDataSetChanged() wird nicht funktionieren. – myatmins

Verwandte Themen