从intent返回到mainactivity后更新游标



所以我在我的MainActivity中有这个列表视图,每次主活动启动或恢复时都会更新。代码是

@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中的listview,我有一个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);
        }
    });

现在在 modifyppatient 类中…我可以在数据库条目上做 update/Delete操作。现在的问题是,当我做一个删除操作并返回到MainActivity,并单击listview中的任何项目,我得到一个OutOfBounds异常的光标。ModifyPatient类中delete按钮的当前代码如下:

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

这将删除条目并返回到主活动,但是单击listview中的任何项都会抛出我之前提到的错误。我已经做了一个小的解决方案,我已经替换了下面的行:

ModifyPatient.this.finish();

Intent intent = new Intent(getApplicationContext(),MainActivity.class);
startActivity(intent);

但问题是,原来的活动仍然在后台,一个新的MainActivity被分叉。所以按下后退按钮,回到原来的活动和陈旧的listview。

如果有人可以帮助我,如何更新光标,因为我不能实现在我的情况下的交换光标。我不知道我做错了什么。

提前感谢。

我设置我的变量"arrayAdapter"存在于onResumeonItemClickListenerMainActivitylocalglobal,这就成功了。新代码,其中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();
        }
    });

最新更新