在Android Studio 3.x版开发Android系统的开发记事-如何使用SQLite(六)

比赛结束后,我看了一下程式,才发现,没有写到删除的功能,这样,就不够完整。所以,这个章节,就来将最后一个功能,删除完成。所以,此功能,执行的方式为,在ListView,如果长时间按着某一个项目,就会出现是否确定要删除的讯息,再确定是否要删除此资料。不过,如果要开发此功能,就要重新更新列表的程式架构。而且,删除此资料后,要重新整理列表的资料,测试了不少方式,发现用执行绪来重新整理是比较好的方式。先看一下,完整的程式码:
public class frm_cust_list extends AppCompatActivity implements ListView.OnItemClickListener,ListView.OnItemLongClickListener {    //宣告物件    private SQLiteDatabase db = null;    private Cursor cursor = null;    private SimpleCursorAdapter adapter = null;    ListView lsv_cust;    private String strid = "";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_frm_cust_list);        lsv_cust = (ListView)findViewById(R.id.lsvcust);        lsv_cust.setOnItemClickListener(this);        lsv_cust.setOnItemLongClickListener(this);        //建立SQLite 资料库的实体档案        db = openOrCreateDatabase("cust.db", Context.MODE_PRIVATE,null);        //建立资料表的SQL语法        String strcreatedb = "CREATE TABLE IF NOT EXISTS " +                "tcustomer (_id INTEGER PRIMARY KEY, cname TEXT, ctel TEXT) ";        //执行SQL语法,建立资料表        db.execSQL(strcreatedb);        //查询资料        cursor = db.rawQuery("SELECT * FROM tcustomer",null);        //如果查询有资料的话,就跟ListView做连结        if (cursor != null && cursor.getCount() >=0)        {            adapter = new SimpleCursorAdapter(this,                android.R.layout.simple_list_item_2,                cursor,                new String[] {"_id","cname"},                new int[] {android.R.id.text1,android.R.id.text2},                0);            lsv_cust.setAdapter(adapter);        }    }    @Override    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {        //取得按下ListView的那个Item的值。        TextView txtid = (TextView) view.findViewById(android.R.id.text1);        //prc_showmessage("id:" + txtid.getText().toString() + " " );        //按下Item时,要呼叫编辑的Activity,利用Intent物件带参数过去。        Intent it = new Intent();        it= new Intent(this,frm_cust_edit.class);        it.putExtra("pid",txtid.getText().toString());        startActivity(it);        //关闭本身的Activity。        this.finish();    }    public void prc_btnadd(View v)    {        //按下新增时,要呼叫新增的Activity,利用Intent物件。        Intent it = new Intent();        it= new Intent(this,frm_cust_add.class);        startActivity(it);        //关闭本身的Activity。        this.finish();    }    //显示讯息    public void prc_showmessage(String strmessage)    {        Toast objtoast = Toast.makeText(this,strmessage, Toast.LENGTH_SHORT);        objtoast.show();    }    @Override    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {        //取得按下ListView的那个Item的值。        TextView txtid = (TextView) view.findViewById(android.R.id.text1);        strid = txtid.getText().toString();        new AlertDialog.Builder(this)                .setTitle("删除资料")                .setMessage("您确定要删除资料?")                .setPositiveButton("是", new DialogInterface.OnClickListener() {                    @Override                    public void onClick(DialogInterface dialog, int which) {                        String strupdatesql = "DELETE from tcustomer WHERE _id=" + strid;                        db.execSQL(strupdatesql);                        //透过执行绪,更新ListView的资料。                        new RefreshList().execute();                    }                })                .setNegativeButton("否", new DialogInterface.OnClickListener() {                    @Override                    public void onClick(DialogInterface dialog, int which) {                    }                })                .show();        //要设定成true,才不会触发到onitemclick        return true;    }    private class RefreshList extends AsyncTask<Void,Void,Cursor> {        //通过执行绪AsyncTask来读取资料库,再更新Cursor。        @Override        protected Cursor doInBackground(Void... voids) {            //在执行绪中,重新取得资料库的资料,再回传新的Cursor。            Cursor newCurosr = db.rawQuery("SELECT * FROM tcustomer",null);            return newCurosr;        }        protected void onPostExecute(Cursor newCursor) {            //更新Cursor,再关才原来的Curosr。            adapter.changeCursor(newCursor);            cursor.close();            cursor = newCursor;        }    }}

执行出来的列表画面,如下图所示:
http://img2.58codes.com/2024/20000953nmM51QGQhb.jpg

在列表资料,如果长时间按着某一个项目,就会出现是否确定要删除的讯息,再确定是否要删除此资料。按下「是」,就会直接删除此资料,再重新整理列表资料。
http://img2.58codes.com/2024/200009532pWOmtJIvN.jpg

重新整理的列表资料:
http://img2.58codes.com/2024/20000953D1J26Q3ZkV.jpg

终于写好了,比赛后的第一篇文章。后续,预计将要重新整理我之前写的记帐系统的需求分析、系统分析、系统设计、撰写程式、封装上市。这次会再简化、依新版的Android,重新设计介面及撰写程式等步骤。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章