适配器方法 notifyDataSetChanged 不刷新列表视图

adapter method notifyDataSetChanged not refreshing listview

我需要一些帮助来解决这个奇怪的问题。 第一次加载时,我的列表视图是空白的。 如果我通过退出到另一个 activity 或通过刷新相同的 activity 再次单击以加载页面,我的列表将显示。 有任何想法吗?谢谢

我的变量:

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();

因为您为 mediaIntroQueueListTitles 分配了一个新的 ArrayList。应该直接使用 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();
}