2017-02-12 77 views
-2

我可以使用這個奇怪的問題一些幫助。 第一次加載時,我的列表視圖是空白的。 如果我再次點擊加載頁面,通過退出到其他活動或刷新相同的活動,我的列表顯示。 任何想法?謝謝。適配器方法notifyDataSetChanged不刷新列表視圖

我的變量:

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

OnCreate中:其中設置我stringAdapter

@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

您是否看到mediaId在首次啓動時登錄?說實話,我很驚訝你看到列表中的任何項目,因爲據我所見,你永遠不會添加任何項目到你的適配器的數據。你也是代碼不完整 –

+0

你可以格式化你的代碼嗎?你確定在更新數據集後立即調用'stringAdapter.notifyDataSetChanged()'嗎? – Raghunandan

回答

0

因爲你分配一個新的ArrayList到mediaIntroQueueListTitles。應該直接使用add()。

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

這在我看來並不是問題,因爲_adapter_現在已經被分配給一個新的列表,並帶有它自己的元素,所以'notifyDataSetChanged()'應該更新關於新列表的_ListView_。 –

+0

我做了這些改變,這解決了我的問題。 – makthrow

+0

@ShoaibAnwar如果您爲陣列列表對象分配新的陣列列表。適配器失去對列表的引用,notifyDataSetChanged()將不起作用。 – myatmins