适配器方法 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();
}
我需要一些帮助来解决这个奇怪的问题。 第一次加载时,我的列表视图是空白的。 如果我通过退出到另一个 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();
}