2015-05-29 77 views
-3

我需要取消填充列表视图适配器之前按下后退按钮完成列表视图适配器。通过此代码在完成之前取消列表视图适配器的asynctask

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    if(convertView==null){ 
     LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);convertView=inflater.inflate(R.layout.seatadapter, null); 

     TextView text3=(TextView)convertView.findViewById(R.id.text3); 
     ProgressBar progressBar1=(ProgressBar)convertView.findViewById(R.id.progressBar1); 
     TextView predic=(TextView)convertView.findViewById(R.id.textView3); 
     TextView classs=(TextView)convertView.findViewById(R.id.textView4); 
     ImageView img1=(ImageView)convertView.findViewById(R.id.imageView1); 

new update(classs,predic, text3, progressBar1,img1).execute(tarinname.get(position), Date.get(position), Ffrom.get(position), Tto.get(position), Ccl.get(position)); 

class update extends AsyncTask{ 

@Override 
     protected Object doInBackground(Object... params) { 

Code For Json Parsing.... 
} 
     protected void onPostExecute(Object result) { 
      super.onPostExecute(result); 

      if (this.result.contains("CurrentStatus")) { 
       progressBar.setVisibility(progressBar.GONE); 

       t.setVisibility(t.VISIBLE); 
       t3.setVisibility(t3.VISIBLE); 
       im1.setVisibility(im1.VISIBLE); 

       t3.setText("Class "+TravelClass); 

       t1.setText(perdcition); 

       if (ConfirmTktStatus.contains("Confirm")) { 
        im1.setImageResource(R.drawable.img_green); 

       } 
       if (ConfirmTktStatus.contains("Probable")) { 

        } 
       if (ConfirmTktStatus.contains("No Chance")) { 

        } 

       t.setText(var1); 

      }else { 
       progressBar.setVisibility(progressBar.GONE); 
      } 


       Toast.makeText(context, var, Toast.LENGTH_LONG).show(); 
       } 

这是适配器类,我们无法通过在其过程中按回按钮来取消它。在按下后退按钮时,活动关闭,但后台任务继续。

@Override 
      protected void onCancelled() { 
       // TODO Auto-generated method stub 
       super.onCancelled(); 
       ((Activity)context).finish(); 

      } 

我试过这个已经没用了.. !!

+1

如何[取消](http://developer.android .com/reference/android/os/AsyncTask.html#cancel(boolean))metod? – Chaosit

+0

更新我试过的问题.. !! –

+0

看看你做什么:当任务被取消时你完成活动。活动结束后,您应该取消任务。您应该将AsynkTask实例放在某个变量中,并在Activity的onStop生命周期回调中将其取消。 –

回答

1

请创建一个列表,保存当前的AsyncTask,然后取消它,只要你愿意

for (AsyncTask myAsyncTask : myAsyncTasks) { 
    if (myAsyncTask.getStatus().equals(AsyncTask.Status.RUNNING)) { 
     myAsyncTask.cancel(true); 
    } 
} 
myAsyncTasks.clear(); 

为您的代码说明:

private List<AsyncTask> myAsyncTasks = new ArrayList<>(); 
public void addRunningTask(AsyncTask task) { 
    myAsyncTasks.add(task); 
} 

public void cancelRunningTasks() { 
    for (AsyncTask myAsyncTask : myAsyncTasks) { 
     if (myAsyncTask.getStatus().equals(AsyncTask.Status.RUNNING)) { 
      myAsyncTask.cancel(true); 
     } 
    } 
    myAsyncTasks.clear(); 
} 
@Override 
public void onBackPressed() { 
    cancelRunningTasks(); 
} 
@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    if(convertView==null){ 
     LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);convertView=inflater.inflate(R.layout.seatadapter, null); 

     TextView text3=(TextView)convertView.findViewById(R.id.text3); 
     ProgressBar progressBar1=(ProgressBar)convertView.findViewById(R.id.progressBar1); 
     TextView predic=(TextView)convertView.findViewById(R.id.textView3); 
     TextView classs=(TextView)convertView.findViewById(R.id.textView4); 
     ImageView img1=(ImageView)convertView.findViewById(R.id.imageView1); 

AsyncTask task = new update(classs,predic, text3, progressBar1,img1); 
task.execute(tarinname.get(position), Date.get(position), Ffrom.get(position), Tto.get(position), Ccl.get(position)); 
addRunningTask(task); 

class update extends AsyncTask{ 

@Override 
     protected Object doInBackground(Object... params) { 

Code For Json Parsing.... 
} 
     protected void onPostExecute(Object result) { 
      super.onPostExecute(result); 

      if (this.result.contains("CurrentStatus")) { 
       progressBar.setVisibility(progressBar.GONE); 

       t.setVisibility(t.VISIBLE); 
       t3.setVisibility(t3.VISIBLE); 
       im1.setVisibility(im1.VISIBLE); 

       t3.setText("Class "+TravelClass); 

       t1.setText(perdcition); 

       if (ConfirmTktStatus.contains("Confirm")) { 
        im1.setImageResource(R.drawable.img_green); 

       } 
       if (ConfirmTktStatus.contains("Probable")) { 

        } 
       if (ConfirmTktStatus.contains("No Chance")) { 

        } 

       t.setText(var1); 

      }else { 
       progressBar.setVisibility(progressBar.GONE); 
      } 


       Toast.makeText(context, var, Toast.LENGTH_LONG).show(); 
       } 
+0

我在哪里把这个代码.. ??在doInBackGround或其他地方.. ??我正在粘贴它在适配器..! –

+1

首先,您应该将任务插入列表:AsyncTask task = new update(classs,predic,text3,progressBar1,img1)); task.execute ...; myAsyncTasks.add(任务);然后你按后退按钮 –

+0

初始化数组列表和“更新”时,取消他们是的AsyncTask类名 的ArrayList UPD; 定义数组列表 upd = new ArrayList (); 新的更新(类里面,predic,文字3,progressBar1,IMG1).execute(tarinname.get(位置),Date.get(位置),Ffrom.get(位置),Tto.get(位置),Ccl.get(位置)); @覆盖 保护对象doInBackground(对象... PARAMS){ \t \t \t \t为(的AsyncTask myAsyncTask:UPD)。{ \t \t \t \t \t如果(myAsyncTask.getStatus()等于(AsyncTask.Status.RUNNING )){ \t \t \t \t \t myAsyncTask.cancel(真); \t \t \t \t \t} \t \t \t \t \t} \t \t \t \t \t upd.clear(); –

相关问题