1

助けを求めてもいいですか...データベースにデータを追加することはできます..しかし、データを削除するのに問題があります..ListViewからIDに基づいて削除できないため... IDを取得する方法??. .これは私のコードです..

このクラス名は ViewActivity.java で、データベースのコンテンツを表示します... ListView に 1 つの列のみを表示します

   String query = "select * from " + helper.TABLE_PEKERJA;

        Cursor c = database.rawQuery(query, null);

        if(c!=null)
        {
            c.moveToFirst();
            int getNamaIndex = c.getColumnIndex(helper.COL_NAMA);

            if(c.isFirst())
            {
                do{
                    String nama = c.getString(getNamaIndex);
                    result.add(nama);
                }while(c.moveToNext());
            }
        }

        this.setListAdapter(new ArrayAdapter(this,  android.R.layout.simple_list_item_1,result));
        getListView().setTextFilterEnabled(true);

DBHelper で、ここにあるデータベース テーブルから行を削除するメソッドを作成します。

public void deleteData(SQLiteDatabase db, String id)
{
    db.delete(TABLE_PEKERJA, COL_ID + " = " +id, null);
}

次に、クラスViewActivity.javaで、メソッドonListItemClickを実装します

    @Override
 protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);

    DBHelper helper = new DBHelper(this);
    database = helper.getWritableDatabase();        

    Object o = this.getListAdapter().getItem(position);
    String keyword = o.toString();
    helper.deleteData(database, keyword);
    Toast.makeText(this, "Data " + keyword + " removed" , Toast.LENGTH_SHORT).show();

}

このエラーも発生しました..このエラーは私だけが見ることができます...このエラーの一部

Object o = this.getListAdapter().getItem(position);

02-09 02:34:23.729: E/Database(28923):  at com.example.untukmuna.ViewContentActivity.onListItemClick(ViewContentActivity.java:69)

だから、私の質問は

1)IDに基づいてListViewでアイテムを押すと、データベーステーブルの行を削除するにはどうすればよいですか 2)データベースを作成するときに、 db.open() があります...しかし、どこでデータベースを閉じる必要がありますか db.close() を入れて購入します。 ..??

ありがとう~~私の質問を理解してくれることを願っています.. ^_^

4

1 に答える 1

0

id従来の方法では、リストのクリックパラメータからを取得するだけです。

protected void onListItemClick(ListView l, View v, int position, long id) <------

ListViewただし、はではなくに接続されているため、すぐにこれを行うことはできませArrayAdapterCursorAdapter。今のところ、それidは常に0または意味のない値になります。このようなタスクを実行する必要がある場合は、アダプターを変更することをお勧めします。

ただし、アダプタをそのまま必要とする場合は、idデータベースをループして入力するときに入力する、ある種の対応するコレクションを作成することができますresultposition次に、onListItemClickパラメータからを取得してidからidコレクションからを取得するのと同じくらい簡単です。

もちろん、リストビューの行を削除するときに、このコレクションから値を削除していることを確認する必要があります。


次のことを試してください。

private DBHelper helper;
private SQLiteDatabase db;
private ArrayList<String> result = new ArrayList<String>();
private ArrayList<Long> idList = new ArrayList<Long>();
private ArrayAdapter<String> adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    helper = new DBHelper(this);
    db = helper.getWritableDatabase();      

    String query = "select * from " + helper.TABLE_PEKERJA;
    Cursor c = db.rawQuery(query, null);
    int getIdIndex = c.getColumnIndex(helper.COL_ID);
    int getNamaIndex = c.getColumnIndex(helper.COL_NAMA);

    while (c.moveToNext()) {
        idList.add(c.getLong(getIdIndex));
        result.add(c.getString(getNamaIndex));
    }

    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, result);
    this.setListAdapter(adapter);
    getListView().setTextFilterEnabled(true);
}

public boolean deleteData(Long id) {
    return db.delete(TABLE_PEKERJA, COL_ID + " = " + id, null) > 0;
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    Long idValue = idList.get(position);
    boolean isDeleted = deleteData(idValue);
    Toast.makeText(this, "boolean value for database deletion: " + String.valueOf(isDeleted), Toast.LENGTH_SHORT).show();

    idList.remove(position);
    result.remove(position);
    adapter.notifyDataSetChanged(); //refresh so that we can see listview changes
}  
于 2013-02-08T20:24:14.397 に答える