Android学习:将ListView中id与数据库中id关联

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

做毕设过程中遇到一个问题:当用户点击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中不再显示:






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值