2011-09-25 60 views
0

在我的Nexus One(Android的2.3.3)下面的程序從我的XOOM(Android 3.2的)行爲有所不同:的AsyncTask和onclicklistener的Android 2.3.3與3.2

public class TestOnclickWithAsyncTask extends Activity { 

private int mClicked = 0; 

private final static String TAG = "TestOnclickWithAsyncTask"; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.main); 
    RelativeLayout relativeLayout= (RelativeLayout) findViewById(R.id.img_control_panel); 

    final Button button = new Button(this); 

    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      mClicked++; 
      Log.i (TAG, "Clicked "+ mClicked + " times"); 
     } 
    }); 

    relativeLayout.addView(button); 


    new LongTask().execute(); 

} 

private class LongTask extends AsyncTask<Void , Void, Void> { 
    private ProgressDialog dialog; 

     protected void onPreExecute() { 
     dialog = new ProgressDialog(TestOnclickWithAsyncTask.this); 
     dialog.setMessage("Waiting "); 
     dialog.setIndeterminate(true); 
     dialog.setCancelable(true); 
     try { 
      dialog.show(); 
     } catch (Exception e){} 
     } 

     protected Void doInBackground(Void... notused) { 
       try { 
        Thread.sleep (30000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       }//do long task 
      return null; 
     } 


     protected void onPostExecute(Void unusedg) { 
      dialog.dismiss(); 
      Log.i (TAG,"Long task finished"); 
     } 

} 

} 

在我的Nexus我不能按同時的AsyncTask運行(期望的行爲)按鈕:

09-26 00:45:34.361: INFO/TestOnclickWithAsyncTask(3803): Long task finished 
09-26 00:45:36.463: INFO/TestOnclickWithAsyncTask(3803): Clicked 1 times 
09-26 00:45:36.814: INFO/TestOnclickWithAsyncTask(3803): Clicked 2 times 
09-26 00:45:37.975: INFO/TestOnclickWithAsyncTask(3803): Clicked 3 times 
09-26 00:45:38.435: INFO/TestOnclickWithAsyncTask(3803): Clicked 4 times 

在我的XOOM我只需按下按鈕和進度指示器消失。

09-26 00:49:05.440: INFO/TestOnclickWithAsyncTask(5887): Clicked 1 times 
09-26 00:49:06.230: INFO/TestOnclickWithAsyncTask(5887): Clicked 2 times 
09-26 00:49:06.580: INFO/TestOnclickWithAsyncTask(5887): Clicked 3 times 
09-26 00:49:06.840: INFO/TestOnclickWithAsyncTask(5887): Clicked 4 times 
09-26 00:49:08.170: INFO/TestOnclickWithAsyncTask(5887): Clicked 5 times 
09-26 00:49:08.560: INFO/TestOnclickWithAsyncTask(5887): Clicked 6 times 
09-26 00:49:30.960: INFO/TestOnclickWithAsyncTask(5887): Long task finished 
09-26 00:49:32.800: INFO/TestOnclickWithAsyncTask(5887): Clicked 7 times 
09-26 00:49:33.810: INFO/TestOnclickWithAsyncTask(5887): Clicked 8 times 

這是爲什麼不同?更重要的是,如何防止xoom取消進度對話框?

回答

0

爲什麼當你不希望它那樣的時候打電話setCancelable(true)?也許這將幫助您解決問題...

只是一個提示:

try { 
    dialog.show(); 
} catch (Exception e) { 

} 
  1. 爲什麼要那樣做?
  2. 將代碼編入try ... catch並附帶一般例外,但沒有反應是一種非常不好的習慣。當你這樣做時,你應該總是留下一個有充分理由的評論。
+0

或者至少記錄異常,所以如果它失敗,你知道它! – dmon

+0

1.糟糕,刪除了setCancelable(true),但這並沒有解決問題。 2.你是完全正確的,我至少應該記錄例外,但是這也沒有透露任何東西。 –

+0

對話框出現後,您單擊背景(所以按鈕)和對話框消失,以便您可以單擊按鈕?這是怎麼回事?那真的很奇怪。 (...對不起,我現在真的必須睡覺,沒有睡過夜) – Knickedi