做毕设过程中遇到一个问题:当用户点击ListView中条目删除相册时,需要为删除方法传递条目在数据库中对应的id,所以需要根据条目位置获取其在数据库中对应的id。
我的实现思路是:从数据库中获取id,通过for循环将其放在HashMap中,在HashMap中对应关系为:
albumHash.put(i+"", album.getAlbumid()); 即位置对应数据库中id
这样在调用删除方法时从HashMap中取出位置对应的id即可:
albumService.deleteAlbum(i+""));
核心代码如下:
操作相册的Service方法:
public class AlbumService {
private Context context;
private List<Album> listAlbum=null;
public AlbumService(Context ct) {
context = ct;
}
public AlbumService() {
}
// 创建相册的时候只传来相册名称即可
public void addAlbum(String name) {
SQLiteOpenHelper helper = new DBOpenHelper(context);
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("insert into album (albumName) values ('" + name + "')");
db.close(); // 关闭数据库
}
// 获取数据库中所存相册
public List<Album> getAlbums() {
List<Album> listAlbum = new ArrayList<Album>();
SQLiteOpenHelper helper = new DBOpenHelper(context);
SQLiteDatabase db = helper.getWritableDatabase();
Cursor cursor = db.rawQuery("select * from album",null);
while (cursor.moveToNext()) {
Album album=new Album();
album.setAlbumid(cursor.getInt(cursor.getColumnIndex("albumid")));
album.setAlbumName(cursor.getString(cursor.getColumnIndex("albumName")));
listAlbum.add(album);
}
db.close();
return listAlbum;
}
public void deleteAlbum(Object object) {
int sqlId=(Integer)object;
SQLiteOpenHelper helper = new DBOpenHelper(context);
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("delete from album where albumid="+sqlId);
db.close(); // 关闭数据库
}
}循环遍历数据库中所存相册:
for (int i = 0; i < albums.size(); i++) {
albumHash = new HashMap<String, Object>();
Album album=(Album) albums.get(i);
albumHash.put(i+"", album.getAlbumid());
albumHash.put("album_name",album.getAlbumName() );
albumHash.put("album_num", "0张相片");
albumList.add(albumHash);
}通过相册在数据库中id对其进行删除:
albumHash=albumList.get((int)info.id);
albumService.deleteAlbum(albumHash.get((int)info.id+""));其中(int)info.id指的是条目在ListView中的位置。
最后还有一个问题是,当数据库中只剩一个条目之后,点击“删除相册”按钮,该条目依然会存在:

数据库中“新建相册”的信息已删除,但ListView内容没有被更新:

改进,对数据库中条目数加以判断,无条目时给出提示信息,将ListView置为不可见:
private void albumListView() {
albumList = new ArrayList<HashMap<String, Object>>();
List albums=albumService.getAlbums();
if(albums.size()==0){
Toast.makeText(MyAlbumsActivity.this, "系统暂无相册", Toast.LENGTH_SHORT).show();
myalbum_list.setVisibility(8);
}else{
myalbum_list.setVisibility(1);
for (int i = 0; i < albums.size(); i++) {
albumHash = new HashMap<String, Object>();
Album album=(Album) albums.get(i);
albumHash.put(i+"", album.getAlbumid());
albumHash.put("album_name",album.getAlbumName() );
albumHash.put("album_num", "0张相片");
albumList.add(albumHash);
}
SimpleAdapter saImageItems = new SimpleAdapter(this, albumList,// 数据来源
R.layout.myalbumlist_item, new String[] { "album_name", "album_num"},
// 分别对应view 的id
new int[] { R.id.album_name, R.id.album_num});
myalbum_list.setAdapter(saImageItems);
}
}
成功删除最后一个条目,且其在ListView中不再显示:

在Android毕设中,为了实现ListView条目删除功能,需要根据条目位置获取数据库中对应的ID。通过建立HashMap存储位置与ID的关系,然后在删除时从HashMap获取ID。当数据库只剩一个条目时,需要判断并提示用户,同时更新ListView状态。

6852

被折叠的 条评论
为什么被折叠?



