安卓开发(寒假第28天)
这里我们完成了账本条目数据的查看方法和账本条目的添加,但是当我们发现账本的数据有错误是,我们目前还不能删除。于是我们接下来要完成条目的删除的功能。
这里我们在查看某个的账本的明细的页面来操作,我这里采用设置长按下删除。
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
new AlertDialog.Builder(MainActivity.this).setTitle("注意")
.setMessage("是否删除要此项记录?").setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String view1= String.valueOf(listAdapter.getItemId(position));
SQLiteDatabase db = helper.getWritableDatabase();
db.delete("account2","_id= ?",new String[]{view1});
Toast.makeText(getBaseContext(), "已删除", Toast.LENGTH_SHORT).show();
initData();
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
Toast.makeText(getBaseContext(), "已取消删除", Toast.LENGTH_SHORT).show();
}
}).create().show();
return false;
}
});
为了防止误删,这里还做了一个小窗来进行询问,点击确定后才会进行删除。
我们注意,我们数据库的主键为id,这个在页面上是不显示的,但是在我们的辅助类中是有这个set和get方法的,所以我们适配器接收到的辅助类的列表也是含有id这个属性值的。于是在我们的自定义的适配器中,我们久需要对getItemId这个方法进行重写,这个方法的返回值是一个long类型的,我们需要进行强制类型转换。
public long getItemId(int position) {
return Long.parseLong(mList.get(position).get_id());
}
这样我们就能根据我们长按来进行定向删除数据了。
试用后发现,在删除完数据后,页面不会刷新,于是还在删除完后重新调用了初始化页面的方法。
但是最后这个月全部删除完成后我们返回到主页面时,主页面还保留了这个月,于是我们还要设置主页面的刷新。
private Runnable mRunnable = new Runnable() {
@Override
public void run() {
while(true){
try {
//sleep2秒,可根据需求更换为响应的时间
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
mHandler.sendMessage(mHandler.obtainMessage());
}
}
};
//调用定时刷新函数
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
refresh();//编写的定时刷新函数
}
};
private void refresh() {
iniView();
}
这样我们的记账本就基本完成了。


浙公网安备 33010602011771号