【发布时间】:2011-12-03 06:03:45
【问题描述】:
ListView 正在填充来自 Cursor 的项目,我在 SimpleCursorAdapter 中传递这些项目,但每次打开应用程序时,这些项目都是重新添加到列表视图中,不断增加它。当我使用 SimpleAdapter 时,我会这样做:
static final ArrayList<HashMap<String, String>> foobar = new
ArrayList<HashMap<String,String>>();
SimpleAdapter adapter = new SimpleAdapter(this, foobar, R.layout.list_item, String[] from, int[] to);
setListAdapter(adapter);
下一步,解决我的问题:
@Override
public void onDestroy(){
super.onDestroy();
foobar.removeAll(foobar);
}
但是现在我不想删除数据库内容,如果我有一个SimpleCursorAdapter怎么解决呢?喜欢这个:
> SimpleCursorAdapter myadapter = new SimpleCursorAdapter(this, R.layout.list_item, cursor, String[] from, int[] to);
我尝试过 setListAdapter(null) 或 cursor.close() 以及许多其他方法,但没有效果...
现在,当我使用设备的“后退”按钮退出应用程序时,这些会发生。如果我按“主页”按钮,当我回来时,我有相同数量的项目。所以每次我用“返回”按钮退出时,列表都会重复。
感谢 Kaediil 的回答。评论的行是我改进的地方。孔类:
public class DataBaseActivity extends ListActivity {
DataBaseMethods dbmet; //is the class that handle database and auxiliar methods working on it
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list);
dbmet = new DataBaseMethods(this);
Cursor mycursor= dbmet.getItems(); // 1. add new cursor
try{
if(!mycursor.moveToFirst()){ //2.check if there are items in the database
dbmet.addItems("Daniel","Son","Karate-kid");
dbmet.addItems("Silv", "Stalone", "Terminator");
dbmet.addItems("foo", "bar", "buz");
} //
showDatabaseContent();
}
finally{
dbmet.close();
}
}
public void showDatabaseContent(){
DataBaseMethods dbmet = new DataBaseMethods(this);
try{
Cursor cursor = dbmet.getItems();
SimpleCursorAdapter myadapter = new SimpleCursorAdapter(this, R.layout.item_list, cursor, dbmet.FROM, TO);
setListAdapter(myadapter);
}
finally{
dbmet.close();
}
}
【问题讨论】:
-
您提供的代码中不存在您的问题。我猜您的数据是“硬编码”的,您可能只是每次都将其保存到数据库中。查看您的 db 助手类或在 onCreate 下调用其方法的位置。如果找不到,请发布代码。
标签: android android-listview simplecursoradapter