使用 ArrayList 作为数据容器,并通过 SimpleAdapter 绑定到 ListView,ListItem 中包含删除按钮

// 使用 ArrayList 作为数据容器,其中的每一项都是 HashMap<String, Object>
ArrayList<HashMap<String, Object>> PayItems;
PayItems = new ArrayList<HashMap<String, Object>>();

// 新增一项
HashMap<String, Object> map = new HashMap<String,Object>();
map.put("rownum", PayItems.size() + 1);
map.put("name", strName);
map.put("nameid", NameId);
map.put("shiyou", strShiyou);
map.put("date", edtDate.getText().toString().trim());
PayItems.add(map);

// 遍历容器中每一项,将其写入数据库
ContentValues cv = new ContentValues();
for (HashMap<String, Object> i : PayItems) {
    cv.clear();
    cv.put("pid", (Long)i.get("nameid"));
    cv.put("pay", (Integer)i.get("pay"));
    cv.put("shiyou", (String)i.get("shiyou"));
    cv.put("date", (Long)i.get("juliandate"));
    ret = db.insert("zhangmu", null, cv);
}
PayItems.clear();

// 将容器中的数据绑定到 ListView 上,根据每一行的 flagIn ,使用两种不同的布局文件(其中的子控件只有位置差异,ID都相同)
adpPayItems = new SimpleAdapter(this, PayItems, (flagIn? R.layout.l_pay_item_in : R.layout.l_pay_item_out),
        new String[] {"rownum","name", "pay","shiyou", "date"},
        new int[] {R.id.tZMNum, R.id.tZMName, R.id.tSum, R.id.tZMShiyou, R.id.tZMDate}){

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        final View v = super.getView(position, convertView, parent);

        // ListItem 中有一个删除按钮,用于删除当前条目
        ImageButton btnDel = (ImageButton) v.findViewById(R.id.btnItemDel);
        btnDel.setTag(position);
        btnDel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final View vv = v;
                AlertDialog.Builder dlg = new AlertDialog.Builder(actInput.this);
                dlg.setTitle("确认")
                        .setMessage("确定要删除当前项目吗?")
                        .setNegativeButton("取消", null)
                        .setPositiveButton("确定",
                               new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        // 删除当前条目
                                        PayItems.remove((int) vv.getTag());
                                        UpdateList();
                                    }
                                }
                        )
                        .show();
            }  // END OF "onClick"
        });  // END OF "new View.OnClickListener()"
        return v;
    }  // END OF "override GetView()"
};  // END OF "new SimpleAdapter()"
posted @ 2022-01-06 21:25  汉学  阅读(37)  评论(0)    收藏  举报