notifyDataSetChanged()使列表刷新,并且滚动跳回到

家电维修 2023-07-16 19:17www.caominkang.com家电维修技术

这种行为是不正常的。我看不到您的代码,我建议您执行以下操作

1)您不是

notifyDataSetChanged()
从UI线程调用。正确的方法

runonUiThread(ne Runnable() { public void run() {  adapter.notifyDataSetChanged(); }});

2)您是否偶然拨打了电话

adapter.notifyDataSetInvalidated();

3)在您的适配器中,您重写了

adapter.notifyDataSetChanged();
方法并添加了说明以转到顶部

4)如果您使用列表来填充适配器-
每次都提供新列表,那么适配器设置将被刷新。您应该始终提供相同的列表。,您可以根据需要进行任意更改。如果您要重置列表,请使用

list.clear
代替
list= ne ArrayList();

这是我的适配器的示例

public class Adapter extends baseAdapter { private Activity activity; private ArrayList<HashMap<String, String>> data; private static LayoutInflater inflater = null; public ImageLoader imageLoader; public MediaItemAdapter(Activity a, ArrayList<HashMap<String, String>> d) {  activity = a;  data = d;  inflater = (LayoutInflater) activity  .getSystemService(Context.LAYOUT_INFLATER_SERVICE);  imageLoader = ne ImageLoader(activity.getApplicationContext()); } public int getCount() {  return data.size(); } public Object getItem(int position) {  return position; } public long getItemId(int position) {  return position; } public Vie getVie(int position, Vie convertVie, VieGroup parent) {  Vie vi = convertVie;  if (convertVie == null) { vi = inflater.inflate(R.layout.item_poser, null);  }  TextVie title = (TextVie) vi.findVieById(R.id.item_title); // title  TextVie price = (TextVie) vi.findVieById(R.id.price);  return vi; }}

要求适配器

List myList = ne ArrayList<HashMap<String, String>>();Adapter ma = ne Adapter(this, myList);

适配器初始化之前,myList可以为空。

然后对我的列表进行一些操作

myList.add(someElement);ma.notifyDataSetChanged();

如果需要删除所有项目

myList.clear();ma.notifyDataSetChanged();

这样的实现是无止境的,我看到了超过一万五千个元素,没有任何问题。



Copyright © 2016-2025 www.jianfeikang.com 建飞家电维修 版权所有 Power by