Java 取消在onPostExecute内部创建的适配器中使用onClickListener启动的异步任务

Java 取消在onPostExecute内部创建的适配器中使用onClickListener启动的异步任务,java,android,android-asynctask,Java,Android,Android Asynctask,这是我的上下文:我有一个活动,可以下载视频列表并将它们设置到适配器中。当用户单击每个项目时,应用程序将在外部应用程序中下载和流式传输视频。 那么,让我们看一些代码。主要活动包括: new TvAsyncTask(getActivity(), gridView, progressBar).execute(); TVSyncTask下载视频列表,如下所示: protected void onPostExecute(ArrayList<VideoPreviewData> list) {

这是我的上下文:我有一个活动,可以下载视频列表并将它们设置到适配器中。当用户单击每个项目时,应用程序将在外部应用程序中下载和流式传输视频。 那么,让我们看一些代码。主要活动包括:

new TvAsyncTask(getActivity(), gridView, progressBar).execute();
TVSyncTask下载视频列表,如下所示:

protected void onPostExecute(ArrayList<VideoPreviewData> list) {
        progressBar.setVisibility(View.INVISIBLE);

        final TvListAdapter adapter = new TvListAdapter(activity.getApplicationContext(), R.layout.item_video_list, list);

        videoGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
              public void onItemClick(AdapterView<?> parent, final View view, int position, long id) {
                  String videoUrl = adapter.getItem(position).getLink();
                  //Launch asyncTask to download video an load it into an external media player
                  new GetVideoAsyncTask(activity).execute(videoUrl);                  
              }
            });
        if (videoGridView!=null) videoGridView.setAdapter(adapter);
}
GetVideoAsyncTask加载视频链接并在外部应用程序中启动意图以流式传输该视频。为了做到这一点,在onload期间,我设置了一个ProgressDialog,向用户显示加载消息。加载完成后,启动intent

问题 当显示ProgressDialog并且用户单击“上一步”按钮时,对话框被取消,但asynctask继续工作。因此,当它完成时,它将启动intent。 我想阻止这一切。我在MainActivity中有一个onPause方法,但我没有从适配器启动的GetVideoAsyncTask的引用。因此,我无法调用AsyncTask.canceltrue方法来拒绝意向启动。
有什么建议吗?

创建异步任务类的对象

TvAsyncTask tvTask = new TvAsyncTask(getActivity(), gridView, progressBar);
tvTask.execute();
然后在TVSyncTask类中重写onCanceled函数

@Override
        protected void onCancelled() 
        {
super.onCancelled();
}
在“后退”按钮代码检查中:

if(tvTask != null)
tvTask.cancel(true);

在main activity中,您可以保留对GetVideoAsyncTask和TVSyncTask的引用,并在onPause中取消这两个引用

不活动:

GetVideoAsyncTask getVideoAsyncTask;
TvAsyncTask tvAsyncTask;
在onCreate中:

tvAsyncTask=new TvAsyncTask(getActivity(), gridView, progressBar);
tvAsyncTask.execute();
在麦克利克

getVideoAsyncTask=new GetVideoAsyncTask(activity); 
getVideoAsyncTask.execute(videoUrl);
在onPause中:

if(tvAsyncTask!=null&&!tvAsyncTask.isCancelled())
tvAsyncTask.cancel(true);
if(getVideoAsyncTask!=null&&!getVideoAsyncTask.isCancelled())
getVideoAsyncTask.cancel(true);

我的问题是getVideoAsyncTask是在TVSyncTask内的onClickListener内创建的对象。我无法从McClick设置它。我没有参考它..我尝试了这个折衷方案:在ProgressDialog上设置可取消False。这样,用户就不可能取消该操作,所以我不需要停止该任务。这不是最好的主意,因为网络可能很慢,用户可能不想等待。。但没有找到其他解决方案。