Android 不了解在更新listview中的元素时是否使用notifyDataSetChanged()?

Android 不了解在更新listview中的元素时是否使用notifyDataSetChanged()?,android,listview,android-listview,Android,Listview,Android Listview,我有一个android应用程序,它使用带有自定义对象适配器的listview 一旦创建活动,如果对象列表可用,我将使用以前的对象填充适配器,并进行异步调用以获取新对象并填充适配器 再次填充适配器时,旧的元素列表将被删除,新的元素列表将被添加。我没有使用notifyDataSetChanged() privateCustomAdapter列表适配器; 私有GridView GridView; //这是片段的onCreateView,若我在singleton中找到旧列表,我将填充列表,并显示在屏幕上

我有一个android应用程序,它使用带有自定义对象适配器的listview

一旦创建活动,如果对象列表可用,我将使用以前的对象填充适配器,并进行异步调用以获取新对象并填充适配器

再次填充适配器时,旧的元素列表将被删除,新的元素列表将被添加。我没有使用notifyDataSetChanged()

privateCustomAdapter列表适配器;
私有GridView GridView;
//这是片段的onCreateView,若我在singleton中找到旧列表,我将填充列表,并显示在屏幕上
函数onCreateView()
{
...
...
listAdapter=新的CustomAdapter(getActivity(),
CounterSingleton.getInstance(getActivity())
.getObjects());
setAdapter(listAdapter);
....
...
新建AsnycTask().execute();
}
AsnycTask类
{
//获取新列表并替换显示的旧列表
List newList=fetchNewList();
listAdapter=新的CustomAdapter(
getActivity(),newList);
setAdapter(listAdapter);
}
这里有几个问题:

  • 通过创建适配器的新实例填充适配器后,是否需要在AsnycTask类中使用notifyDataSetChanged()

  • 根据上述代码,旧列表将被删除并替换为新列表

  • 我完成后是否需要在AsnycTask类中使用notifyDataSetChanged() 通过创建适配器的新实例来填充适配器

    无需调用
    notifyDataSetChanged()
    ,因为当前正在使用新数据源为ListView调用
    setAdapter
    方法

    根据上述代码,旧列表将被删除并替换为新列表

    是,ListView将填充新数据

    注意:不要再次调用
    setAdapter
    方法-2来显示新数据。在适配器内创建一个方法,该方法将使用新数据更新当前适配器。例如:

    public void addNewItems(List<Objects> itemList){
    
      1. clear data from current adapter
        for example if using ArrayList then
    
         ArrayList_Object.clearAll();
      2. Add itemList  in ArrayList_Object
         ArrayList_Object.addAll(itemList);
    
      3. Call this.notifyDataSetChanged()
    }
    

    如果您正在创建新实例,则无需使用NOTIFYDATASETCHANGE()。旧列表将替换为新列表。您实际想要什么?您想用新项目删除旧项目,还是想保留两者?@MurtazaKhursheedHussain在我显示的异步类中删除旧项目并替换为新项目。。。
    public void addNewItems(List<Objects> itemList){
    
      1. clear data from current adapter
        for example if using ArrayList then
    
         ArrayList_Object.clearAll();
      2. Add itemList  in ArrayList_Object
         ArrayList_Object.addAll(itemList);
    
      3. Call this.notifyDataSetChanged()
    }
    
    listAdapter.addNewItems(newList)