所以我在MainActivity中有这个listview,每次主要活动开始或恢复时都会更新。 代码是
@Override
public void onResume()
{
super.onResume();
Cursor array_list_patients = mydb.getAllPatientsDetails();
PatientAdapter arrayAdapter = new n
PatientAdapter(this,array_list_patients);
obj = (ListView)findViewById(R.id.listView1);
obj.setAdapter(arrayAdapter);
}
现在对于 MainActivity 中的列表视图,我有一个 setOnItemClickListener ,如下所示,它基本上显示另一个活动“ ModifyPatient ”中的数据。代码是:
Cursor array_list_patients = mydb.getAllPatientsDetails();
final PatientAdapter arrayAdapter = new PatientAdapter(this,array_list_patients);
obj = (ListView)findViewById(R.id.listView1);
obj.setAdapter(arrayAdapter);
obj.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
Cursor cur = (Cursor) arrayAdapter.getItem(arg2);
cur.moveToPosition(arg2);
int id_To_Search = cur.getInt(cur.getColumnIndexOrThrow("id"));
Bundle dataBundle = new Bundle();
dataBundle.putInt("id", id_To_Search);
Intent intent = new Intent(getApplicationContext(),ModifyPatient.class);
intent.putExtras(dataBundle);
startActivity(intent);
}
});
现在在 ModifyPatient 类中..我可以对数据库条目执行 Upate / Delete 操作。现在的问题是,当我执行删除操作并返回 MainActivity ,然后点击 listview 中的任何项目时,我会得到 OutOfBounds 光标异常。 ModifyPatient 类中当前的删除按钮代码如下:
deleteButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(ModifyPatient.this);
builder.setMessage(R.string.deleteContact)
.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
mydb.deletePatient(id_To_Update);
Toast.makeText(getApplicationContext(), "Deleted Successfully",
Toast.LENGTH_SHORT).show();
ModifyPatient.this.finish();
}
})
.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});
AlertDialog d = builder.create();
d.setTitle("Are you sure");
d.show();
}
});
这将删除该条目并返回到mainactivity,但是单击listview中的任何项目都会引发我之前提到的错误。 我已经做了一个小的解决方法,我已经替换了以下行:
ModifyPatient.this.finish();
与
Intent intent = new Intent(getApplicationContext(),MainActivity.class);
startActivity(intent);
但问题是,原始活动仍然在后台,并且分叉了新的MainActivity。因此,按下后退按钮,返回原始列表视图的原始活动。
如果有人可以帮我解决,如何更新游标,因为我无法在我的情况下实现swapcursor。我不确定我做错了什么。
提前谢谢。
答案 0 :(得分:0)
我设置我的变量&#34; arrayAdapter &#34;出现在主要活动中的 onResume 和 onItemClickListener ,从本地到全球,以及这就是诀窍。 新代码,其中 arrayAdapter 是全局的:
public void onResume()
{
super.onResume();
Cursor array_list_patients = mydb.getAllPatientsDetails();
arrayAdapter = new PatientAdapter(this,array_list_patients);
obj = (ListView)findViewById(R.id.listView1);
obj.setAdapter(arrayAdapter);
}
和
arrayAdapter = new PatientAdapter(this,array_list_patients);
obj = (ListView)findViewById(R.id.listView1);
obj.setAdapter(arrayAdapter);
obj.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
Cursor cur = (Cursor) arrayAdapter.getItem(arg2);
cur.moveToPosition(arg2);
int id_To_Search = cur.getInt(cur.getColumnIndexOrThrow("id"));
Bundle dataBundle = new Bundle();
dataBundle.putInt("id", id_To_Search);
Intent intent = new Intent(getApplicationContext(),ModifyPatient.class);
intent.putExtras(dataBundle);
startActivity(intent);
arrayAdapter.notifyDataSetChanged();
}
});