我正在努力解决问题并阅读有关此情况的几乎所有主题,但我无法找到适合我案例的解决方案。我会很感激所有的建议。 在我的情况下,我正在创建一个测试应用程序并将结果写入数据库,而不是尝试将结果摘要导入ListView。 首先将一个空List作为全局变量,我启动一个ArrayList
ArrayList<Results> updatedList = new ArrayList<>();
在onCreateView中,我使用空列表启动适配器。我有一个常规的CustomAdapter。
ProfileArrayAdapter arrayAdapter = new ProfileArrayAdapter(getContext(),0,updatedList);
在另一种方法中,我使用新数据更新我的Object,并添加到arrayAdapter,但不幸的是我尝试了所有可能的方法,但只有最后的值被添加到适配器,并且之前的值被删除。我甚至使用notifyDataSetChanged。 也许for循环可以是一个解决方案,但随着项目数量的增加,这将是一个问题。请就这个问题给我一些建议。
Results aResults = new Results (testIdString, testTypeString, numberOfCorrectAnswers, numberOfFalseAnswers, numberOfEmptyAnswers);
arrayAdapter.add(aResults);
arrayAdapter.notifyDataSetChanged();
编辑:解决方案:问题是每次TabAdapter为fragmentPager调用片段时刷新列表。在Tabadapter中,我用
更改了新的StatisticalFragmentStatisticsFragment stat = StatisticsFragment.newInstance(StatisticsFragment.updatedList);
在FragmentActivity中,我使用putParcelableArrayList将数组传输到新片段。为了做到这一点,我在Results类中实现了Parcelable类。我希望这个解决方案可以帮助别人。
答案 0 :(得分:0)
SlmÖmerKardes,
您必须先将新对象Result aResult
添加到全局ArrayList updatedList
。添加后,只需致电arrayAdapter.notifyDataSetChanged();
。
应该看起来像这样:
ArrayList<Results> updatedList = new ArrayList<>();
ProfileArrayAdapter arrayAdapter;
...
public View onCreateView(...){
arrayAdapter = new ProfileArrayAdapter(getContext(), 0, updatedList);
...
}
public void updateList (Result newResult){
updatedList.add(newResult);
arrayAdapter.notifyDataSetChanged();
}