1

データベースからレコードを削除しようとしていますが、

短い要約:

  1. 私のデータベースはリストビューを生成します
  2. ユーザーはリストビューをクリックして、新しいアクティビティの詳細を表示できます
  3. この新しいアクティビティからレコードを削除できるようにしたい

コード

ModuleDatabaseHandlerデータベースを管理するという名前のクラスがあります。これには、getData()レコードをListViewin に入力するというメソッドがありActivityViewAllます。

ModuleDatabaseHandler

public ArrayList<String> getData() {
    // TODO Auto-generated method stub

    String[] columns = new String[] { KEY_ROWID, KEY_MODULE_CODE,
            KEY_MODULE_NAME, KEY_LECTURE_PRACTICAL,
            KEY_LECTURE_PRACTICAL_SHORT, KEY_LECTURE_DAY,
            KEY_LECTURE_DAY_SHORT, KEY_START_TIME, KEY_END_TIME,
            KEY_LOCATION, ADDITIONAL_INFO };
    Cursor c = ourDatabase.query(DATABASE_MODULES, columns, null, null,
            null, null, null);
    ArrayList<String> results = new ArrayList<String>();

    int indexModCode = c.getColumnIndex(KEY_MODULE_CODE);

    int indexLectPracShort = c.getColumnIndex(KEY_LECTURE_PRACTICAL_SHORT);

    int indexLectDayShort = c.getColumnIndex(KEY_LECTURE_DAY_SHORT);
    int indexLectStart = c.getColumnIndex(KEY_START_TIME);

    int indexLectLoc = c.getColumnIndex(KEY_LOCATION);

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
        results.add(c.getString(indexModCode) + " "
                + c.getString(indexLectPracShort) + " "
                + c.getString(indexLectDayShort) + " "
                + c.getString(indexLectStart) + " "
                + c.getString(indexLectLoc));
    }



return results;
    }

このデータは によって読み込まれActivityViewAllます:

ActivityViewAll

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_view_modules_test);

    ModuleDatabaseHandler info = new ModuleDatabaseHandler(this);
    info.open();
    ArrayList<String> data = info.getData();
    info.close();

    l = (ListView) findViewById(R.id.listView1);

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, data);
    l.setAdapter(adapter);
    l.setOnItemClickListener(this);

}

ModuleDatabaseHandlerクラスgetAllData()には、ユーザーがListViewアイテムを押して、新しいアクティビティでアイテムに関する詳細をすべて読み取ることができる別のメソッドがありActivityFullDetailsます。

    public String getAllData(int specified_position) {
        // TODO Auto-generated method stub
        int position = specified_position;

        if(c.moveToPosition(specified_position)) {
            String result = "";
            for(int columnIndex = 0; columnIndex<c.getColumnCount();columnIndex++) {
                result += c.getString(columnIndex)+" ";
            }
            return result;
        } else {
            throw new IllegalArgumentException("Row " + specified_position + " does not exist");
        }

}

データは listView から using に転送さActivityViewAllActivityFullDetailsますonItemClick

public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

    TextView temp = (TextView) view;
    Toast.makeText(this, temp.getText() + " " + i, Toast.LENGTH_SHORT)
            .show();

    ModuleDatabaseHandler info = new ModuleDatabaseHandler(this);
    info.open();
    String module_info = info.getAllData(i);
    info.close();

    Intent fullModuleDetails = new Intent();
    fullModuleDetails.setClassName("com.example.collegetimetable",
            "com.example.collegetimetable.ModuleDetails");

    fullModuleDetails.putExtra("list1", module_info);

    startActivity(fullModuleDetails);

}

ModuleDatabaseHandlerクラスに戻りdeleteEntry、行の削除を試みるために呼び出されるメソッドを作成しました。

public void deleteEntry(long row){
    ourDatabase.delete(DATABASE_MODULES,  KEY_ROWID + "=" + row, null);

}

問題

クラスから listViewに渡してROW_IDからレコードを削除するにはどうすればよいですか?ModuleDatabaseHandlerActivityViewAllActivityFullDetails

解決した

受け入れられた回答に見られるようにメソッドをSerge作成することで、これを解決するのを手伝ってくれた人に感謝します。getRowIdメソッド内にカーソルクエリを追加する必要がありましたが、受け入れられた回答には表示されていません。

    public int getRowID(int specified_position) {
    String[] columns = new String[]{ KEY_ROWID, KEY_MODULE_CODE, KEY_MODULE_NAME, KEY_LECTURE_PRACTICAL, KEY_LECTURE_DAY, KEY_START_TIME,KEY_END_TIME, KEY_LOCATION, ADDITIONAL_INFO};
    Cursor c = ourDatabase.query(DATABASE_MODULES, columns, null, null, null, null, null);
// rest of method as shown below
}

このメソッドはActivityViewAll、クラスのインスタンスからアクティビティ ページで呼び出され、を使用してページModuleDatabaseHandlerに渡されます (そして、通常どおりに受信されます)。その後、削除メソッドは を使用できます。ActivityFullDetailsputExtragetIntent().getExtrasrowid

4

1 に答える 1

1

機能追加

public int getRowID(int specified_position) {
    int position = specified_position;
    if(c.moveToPosition(specified_position)) {
        return c.getInteger(c.getColumnIndex(KEY_ROWID));
    } else {
        throw new IllegalArgumentException("Row " + specified_position + " does not exist");
    }

}

そして、それを使用するために

public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

TextView temp = (TextView) view;
Toast.makeText(this, temp.getText() + " " + i, Toast.LENGTH_SHORT)
        .show();

ModuleDatabaseHandler info = new ModuleDatabaseHandler(this);
info.open();
String module_info = info.getAllData(i);
int rowID = info.getRowID(i);
info.close();

Intent fullModuleDetails = new Intent();
fullModuleDetails.setClassName("com.example.collegetimetable",
        "com.example.collegetimetable.ModuleDetails");

fullModuleDetails.putExtra("list1", module_info);
fullModuleDetails.putExtra("rowid", rowID);

startActivity(fullModuleDetails);

}
于 2013-11-01T18:14:58.657 に答える