arrayAdapter.add不保留以前的对象

时间:2016-12-22 18:18:47

标签: listview arraylist android-arrayadapter notifydatasetchanged

我正在努力解决问题并阅读有关此情况的几乎所有主题,但我无法找到适合我案例的解决方案。我会很感激所有的建议。 在我的情况下,我正在创建一个测试应用程序并将结果写入数据库,而不是尝试将结果摘要导入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中,我用

更改了新的StatisticalFragment

StatisticsFragment stat = StatisticsFragment.newInstance(StatisticsFragment.updatedList);

在FragmentActivity中,我使用putParcelableArrayList将数组传输到新片段。为了做到这一点,我在Results类中实现了Parcelable类。我希望这个解决方案可以帮助别人。

1 个答案:

答案 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();
}