【问题标题】:Android adapter notifyDataSetChanged() doesn't clear previous listAndroid 适配器 notifyDataSetChanged() 不清除以前的列表
【发布时间】:2012-08-23 07:26:30
【问题描述】:

我看到关于 notifyDataSetChanged() 有很多问题。我浏览了其中的许多,但没有一个解决方案适合我。

我正在使用 ArrayList 来设置我的列表,并且在我的 ArrayList 更新后,我运行了 notifyDataSetChanged()。新列表将添加到前一个列表中。

假设第一个列表是 a,b,新列表是 a,b,c。我最后得到的是a,b,a,b,c。 并且每次更新都会使用新列表再次发生。

我尝试了其他方法,例如 invalidate()、适配器 clear()、refreshDrawableState() 等,但没有任何效果。

提前谢谢你。

这是简化的代码,注意将 MainActivity 将 Activity 扩展为 ListActivity 会导致程序崩溃,即使我更改了 .xml 文件中的代码。

public class MainActivity extends Activity 
{
ArrayList<String> names = new ArrayList<String>();
ArrayAdapter arrayAdapter = null;

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    ListView lv1 = (ListView) findViewById(R.id.listview);
    arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, names);
    lv1.setAdapter(arrayAdapter);

}

//code here to edit the ArrayList names.

public void onResume() 
{
    super.onResume();  // Always call the superclass method first

    //the activity need to be updated everytime it resumes.
    arrayAdapter.notifyDataSetChanged();

}
}

【问题讨论】:

  • 可能问题出在您正在更新 ArrayList 的代码中。你也可以分享一下吗? ArrayList 在某些方面很棘手,如何替换整个列表内容并不明显。你在放置新元素之前调用 clear() 吗?
  • 我不清楚您是否希望新列表包含 a、b、a、b、c 或仅包含 a、b、c。您是否正确更新了ArrayList 的内容?

标签: android arraylist android-listview android-adapter


【解决方案1】:

似乎您没有正确更新数组列表。请在更新后尝试记录数组列表内容。

【讨论】:

  • 你们是绝对正确的。导致问题的只是我自己的失败逻辑..代码本身工作得很好。
猜你喜欢
  • 2023-03-24
  • 2021-02-20
  • 2011-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
相关资源
最近更新 更多