安卓开发九——长按删除记录和定时刷新页面

这里我们完成了账本条目数据的查看方法和账本条目的添加,但是当我们发现账本的数据有错误是,我们目前还不能删除。于是我们接下来要完成条目的删除的功能。

这里我们在查看某个的账本的明细的页面来操作,我这里采用设置长按下删除。

      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();
    }

这样我们的记账本就基本完成了。

posted @ 2024-02-03 19:23  伐木工熊大  阅读(13)  评论(0编辑  收藏  举报