我有一段代码可以删除数据库中的项目。我从两个不同的活动中调用相同的代码。所以为了避免代码重复,我想将代码转移到 Application 对象。其中一项活动中的代码如下所示:
private void deleteItem() {
AlertDialog.Builder alert = new AlertDialog.Builder(Activity1.this);
alert.setTitle(R.string.confirmTitle);
alert.setMessage(R.string.confirmMessage);
alert.setPositiveButton(R.string.delete_btn,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int button) {
final DbHelper db = new DbHelper(Activity1.this);
AsyncTask<Long, Void, Object> deleteTask = new AsyncTask<Long, Void, Object>() {
@Override
protected Object doInBackground(Long... params) {
db.deleteItem(params[0]);
return null;
}
@Override
protected void onPostExecute(Object result) {
finish();
}
};
deleteTask.execute(new Long[] { rowID });
}
});
alert.setNegativeButton(R.string.cancel_btn, null).show();
}
现在把它放在应用程序对象中,我将函数更改为 public,给它两个输入参数:Context 和 rowID。但是在 AsyncTask 的 onPostExecute 方法中,我必须关闭活动。在活动中,我通过finish() 做到了这一点。在这种情况下我该怎么做?我还在应用程序对象中附加了代码。
public void deleteItem(final Context context, final long rowID) {
AlertDialog.Builder alert = new AlertDialog.Builder(context);
alert.setTitle(R.string.confirmTitle);
alert.setMessage(R.string.confirmMessage);
alert.setPositiveButton(R.string.delete_btn,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int button) {
final DbHelper db = new DbHelper(context);
AsyncTask<Long, Void, Object> deleteTask = new AsyncTask<Long, Void, Object>() {
@Override
protected Object doInBackground(Long... params) {
db.deleteItem(params[0]);
return null;
}
@Override
protected void onPostExecute(Object result) {
finish();
}
};
deleteTask.execute(new Long[] { rowID });
}
});
alert.setNegativeButton(R.string.cancel_btn, null).show();
}