gpt4 book ai didi

android - 将 row_id 从一个 Activity 传递到另一个 Activity ,这样我就可以根据 row_id 从 Activity 中删除行

转载 作者:行者123 更新时间:2023-11-30 03:17:46 27 4
gpt4 key购买 nike

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

简短摘要:

  1. 我的数据库填充了一个 ListView
  2. 用户可以点击 ListView 并查看有关新 Activity 的更多详细信息
  3. 我希望能够删除从这项新 Activity 中记录

代码

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

模块数据库处理器

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 项并阅读有关的完整详细信息新 Activity 上的项目,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");
}

}

使用 onItemClick 将数据从 ActivityViewAll 中的 listView 传输到 ActivityFullDetails:

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

最佳答案

添加函数

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

}

关于android - 将 row_id 从一个 Activity 传递到另一个 Activity ,这样我就可以根据 row_id 从 Activity 中删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19732249/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com