1

私はアンドロイド開発に不慣れで、解決策を見つけることができなかった SQLite テーブルの行を削除する際に問題に遭遇しました。行を削除しようとしても何も起こりません。

「MainActivity」と呼ばれる私のアクティビティでは、コンテキスト メニューを使用して、リストから項目を削除するメソッドを呼び出しています。コードのこの部分は次のとおりです。

case R.id.delete_program:
DBAdapter adap = new DBAdapter(this);
adap.open();
long pass = (long) (position + 1);
adap.removeFromCurrent(pass);
adap.close();   

Runnable run = new Runnable() {
    public void run(){                      
        refreshCurrent(getApplicationContext());
    }
};
runOnUiThread(run);
proAdapt.notifyDataSetChanged();
   return true;  

「DBAdapter」では、メソッド removeFromCurrent():

public boolean removeFromCurrent(long cp_id) {

    return this.dB.delete(PROGRAMS_TABLE, CP_ID + '=' + cp_id, null) > 0;
}

「MainActivity」では、メソッド refreshCurrent():

public static void refreshCurrent(Context context) {        
    CURRENT.clear();
    DBAdapter adap = new DBAdapter(context);
    adap.open();        
    ArrayList<Program> temp = adap.getCurrentPrograms();
    for(Program item : temp) {
        Toast.makeText(context, "Item added: " + item.getName(), Toast.LENGTH_SHORT).show();
        CURRENT.add(item);
    }
    adap.close();       
}

トーストを使用して、テーブルが変更されたかどうかを確認していますが、表示は変更されていません。「DBAdapter」からメソッド getCurrentPrograms():

public ArrayList<Program> getCurrentPrograms() { 
    ArrayList<Program> list = new ArrayList<Program>();

    Cursor cursor =
            this.dB.query(PROGRAMS_TABLE, new String[] {
                    CP_ID, CP_NAME, ACTUAL_DAY, D_ID, CP_CYCLE, CP_DAY_ONE }, 
                    null, null, null, null, null);

    int rows = cursor.getCount();

    if(cursor != null) 
        cursor.moveToFirst();       

    for(int i = 1; i <= rows; i++) {
        list.add(new Program(cursor.getString(cursor.getColumnIndex(CP_NAME)), 
                cursor.getInt(cursor.getColumnIndex(ACTUAL_DAY)), 
                cursor.getInt(cursor.getColumnIndex(CP_DAY_ONE)),
                cursor.getInt(cursor.getColumnIndex(CP_CYCLE))));
        cursor.moveToNext();
    }                   
    return list;
}

ArrayList 'CURRENT' は、ListView に入力するために使用されるリストです。私の考えでは、テーブルから行を削除してから、このリストと ListView を再作成できると考えていました。また、行が削除されると SQLite テーブルがどうなるかについても興味がありました。他の行は位置を上げますか、それとも同じ場所にとどまりますか?

私はまだこれに非常に慣れていないので、私の問題についての助けやコードの残りのヒントをいただければ幸いです。プログラミングで他に何が間違っているか教えてください。

4

1 に答える 1