【问题标题】:Pass row_id from one Activity to another so I can delete row from activity based on row_id将 row_id 从一个 Activity 传递到另一个,以便我可以根据 row_id 从 Activity 中删除行
【发布时间】:2013-11-01 17:42:31
【问题描述】:

我正在尝试从我的数据库中删除一条记录,

小结:

  1. 我的数据库填充了一个列表视图
  2. 用户可以单击列表视图并 查看有关新活动的更多详细信息
  3. 我希望能够删除 记录这项新活动

代码

我有一个名为ModuleDatabaseHandler 的类来管理数据库。在此,我有一个名为 getData() 的方法,它将记录填充到 ActivityViewAll 中的 ListView

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");
        }

}

数据从ActivityViewAll中的listView传输到ActivityFullDetails使用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);

}

问题

如何将ModuleDatabaseHandler 类中的ROW_ID 传递给ActivityViewAll 中的listView,然后传递给ActivityFullDetails,以便删除记录?

已解决

感谢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类的实例调用,使用putExtra传递到ActivityFullDetails页面,(并像往常一样使用getIntent().getExtras接收)..delete方法然后可以使用rowid

【问题讨论】:

    标签: android android-listview android-sqlite android-cursor


    【解决方案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);
    
    }
    

    【讨论】:

    • 这对我不起作用,我不想在活动中显示行 ID - 无论如何谢谢。
    • 让我换个答案
    • 我更改了 getRowID 函数。究竟是什么不起作用? getRowID 函数是否有效?您是否能够额外检索“rowid”?
    • 嘿,它现在可以工作了 - 谢谢,我必须在Rowid 函数中添加信息,即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); 最初我忘记添加KEY_ROWID,它不会工作。感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多