我有一段代码可以删除数据库中的Item。我从两个不同的活动中调用相同的代码。因此,为了避免代码重复,我想将代码转移到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();
}
答案 0 :(得分:5)
不是将其转移到Application,而是创建BaseActivity(扩展Activity类)类,所有活动都扩展BaseActivity ..并且公共代码将放在BaseActivity中
答案 1 :(得分:4)
Context
可以投放到Activity
:
Activity activity = (Activity) context;
而不仅仅是使用:
activity.finish();
答案 2 :(得分:2)
我认为你要做的事情从根本上说不是一个好主意。
在活动代码之外,无法保证活动仍然存在 - 内存管理器可能已将其清理干净,用户可能已按下Back等。
最终的设计决定取决于您,但我建议您考虑是否真的有必要。
如果能带来更多的程序稳定性和可靠性,我认为有点冗余是可以的。
答案 3 :(得分:1)
简单,添加活动实例
public void deleteItem(final Context context, Activity activity,final long rowID){
activity.finish();
}
答案 4 :(得分:0)
在C#中调用Application.finish()
是不可能的。你可以使用这样的方法:
Activityname.finish();
这是一个很好的解决方案。 我希望我帮忙。