安卓开发九——长按删除记录和定时刷新页面
这里我们完成了账本条目数据的查看方法和账本条目的添加,但是当我们发现账本的数据有错误是,我们目前还不能删除。于是我们接下来要完成条目的删除的功能。
这里我们在查看某个的账本的明细的页面来操作,我这里采用设置长按下删除。
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(); }
这样我们的记账本就基本完成了。