Asynctask и onclicklistener android 2.3.3 против 3.2 - PullRequest
0 голосов
/ 26 сентября 2011

На моем Nexus One (Android 2.3.3) следующая программа ведет себя иначе, чем мой Xoom (Android 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 я не могу нажать кнопку во время выполнения асинхронной задачи (желаемое поведение):

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?

1 Ответ

0 голосов
/ 26 сентября 2011

Почему вы звоните setCancelable(true), если не хотите, чтобы так было? Может быть, это решит вашу проблему ...

Просто намек:

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

}
  1. Почему ты это делаешь?
  2. Включение кода в try ... catch с общим уловом исключения без реакции - это действительно плохая привычка. Когда вы делаете это, вы всегда должны оставлять комментарий с уважительной причиной.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...