【发布时间】: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