[英]Finish the calling activity when AsyncTask completes
我的通话活动:
public class Hello extends Activity {
public void onCreate(Bundle savedInstanceState) {
MyTask mt = new MyTask(this);
mt.execute();
}
现在在MyTask中(一个外部类):
public class MyTask extends AsyncTask<Void, Void, Void> {
private Context mContext;
public MyTask(Context context) {
mContext = context;
}
//doinbackground, etc
protected void onPostExecute() {
mContext.finish();
}
如果删除上面的mContext.finish()
,其他事情将按预期工作。
但是,如果我调用mContext.finish()
, mContext.finish()
收到一个错误: The method finish() is undefined for the type Context
(当我编写mContext时,Eclipse不显示finish()。这表明我在错误地使用finish()。)
什么我需要做什么来完成呼叫活动Hello
后MyTask
完成任务
((Activity)mContext).finish();
将Context
转换为Activity
并调用其finish()
方法的正确方法。 不确定为什么要通过AsyncTask
完成Activity
您可以尝试做什么而不是调用context.finish(),为什么不这样做这样的回调接口:
public interface TaskCallback{
void done();
}
然后将其实现到您的活动中
public Hello extends Activity implements TaskCallback{
.....BUNCH OF ACTIVITY CODE.....
public void onCreate(Bundle savedInstanceState) {
MyTask mt = new MyTask(this);
mt.execute();
}
public void done() {
finish();
}
}
而不是使用Context作为参数,而是使用TaskCallback
public class MyTask extends AsyncTask<Void, Void, Void> {
private TaskCallback mCallback;
public MyTask(TaskCallback callback) {
mCallback = callback;
}
//doinbackground, etc
protected void onPostExecute() {
mCallback.done();
}
到此为止,它为您自定义每个实现提供了更大的灵活性。
我遇到相同的情况,然后执行以下操作:
public class MyTask extends AsyncTask<Void, Void, Void> {
private Activity mActivity;
private Context mContext;
public MyTask(Activity activity) {
mActivity = activity;
mContext = mActivity.getApplicationContext();
}
//doinbackground, etc
protected void onPostExecute() {
mActivity.finish();
}
希望对您有所帮助:)
在活动类中定义一个方法,如下所示:
public void FinishAfterAsyncTask()
{
this.finish();
}
并从AsynTask
类的OnPostExecute
方法中调用此方法。
您可以创建一个新的私有AsyncTask,它是从您的公共AsyncTask扩展而来的。
在这个私有的AsyncTask中,您可以访问Activity东西,并且可以重写onPostExecute方法来完成它。
您真正的AsyncTask
public class MyPublicAsyncTask extends AsyncTask<Void, Void, Void> {
Context context;
public GetHorariosAsyncTask(Context ctx){
context = ctx;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
// prepare yourself for an async work
}
@Override
protected Void doInBackground(Void... params) {
// Do yout cool async stuff
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// you're finish, let's tell to user
}
}
您的私人AsyncTask活动
public class MyActivity extends Activity {
Activity mAct;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
mAct = this;
}
private class MyPrivateAsyncTask extends MyPublicAsyncTask {
public MyPrivateAsyncTask(Context ctx) {
super(ctx);
// TODO Auto-generated constructor stub
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
// our async task is completed! let's take care of this activity
mAct.finish();
}
}
}
你能试一下吗
this.finish()
似乎喜欢它,是因为使用未定义的mContext调用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.