Показывать индикатор выполнения при загрузке Activity

У меня есть ListActivity , который запускает другое Activity на основе выбора списка. Этому второму Activity необходимо загрузить достаточный объем данных из Интернета, и поэтому существует заметная задержка между тем, когда пользователь нажимает на элемент, и отображением Activity .

] Это проблема, потому что в настоящее время у меня нет способа указать пользователю, что его щелчок обрабатывается (достаточно было бы даже простого изменения цвета выбранного элемента списка, но я не могу найти хороший способ сделать это). В идеале я мог бы отображать неопределенный ProgressDialog , пока загружается второе Activity .

Я пробовал несколько разных подходов для этого, но ничего не работает должным образом .


Я ' Мы пробовали следующее:

  • Получение сериализуемых данных (не всех, а некоторой части) в AsyncTask в первом Activity и передача их второму как дополнительный. Это действительно не сработало, так как ProgressDialog , который я создал в onPreExecute () , не отображался сразу (кажется, задерживается обработкой, выполненной в doInBackground () ] по какой-то причине.)

Вот код для этого:

AsyncTask<String, Void, String> read = new AsyncTask<String, Void, String>() {
    Dialog progress;

    @Override
    protected void onPreExecute() {
        progress = ProgressDialog.show(SearchActivity.this, 
                "Loading data", "Please wait...");
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... params) {
        DatasetReader reader = new DatasetReader();
        reader.setFundID(params[0]);
        reader.addDatsets(FundProfile.datasets);
        reader.populate();
        return reader.toString();
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        progress.dismiss();
    }
};
read.execute(selectedItem.getUniqueID());
try {
    action = new Intent(SearchActivity.this, FundProfile.class);
    action.putExtra("data", read.get());
} catch(Exception ex) {
    ex.printStackTrace();
}
  • Во втором методе Activity onCreate () (это вообще не работает):

     requestWindowFeature (Window.FEATURE_INDETERMINATE_PROGRESS ); 

    • Получение сериализуемых данных (не всех, а некоторой части) в AsyncTask в первом Activity и их передача второму как дополнительный. Это действительно не сработало, поскольку ProgressDialog , который я создал в onPreExecute () , не отображался сразу (кажется, задерживается обработкой, выполненной в doInBackground () ] по какой-то причине.)

    Вот код для этого:

    AsyncTask<String, Void, String> read = new AsyncTask<String, Void, String>() {
        Dialog progress;
    
        @Override
        protected void onPreExecute() {
            progress = ProgressDialog.show(SearchActivity.this, 
                    "Loading data", "Please wait...");
            super.onPreExecute();
        }
    
        @Override
        protected String doInBackground(String... params) {
            DatasetReader reader = new DatasetReader();
            reader.setFundID(params[0]);
            reader.addDatsets(FundProfile.datasets);
            reader.populate();
            return reader.toString();
        }
    
        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            progress.dismiss();
        }
    };
    read.execute(selectedItem.getUniqueID());
    try {
        action = new Intent(SearchActivity.this, FundProfile.class);
        action.putExtra("data", read.get());
    } catch(Exception ex) {
        ex.printStackTrace();
    }
    
    • Во втором методе Activity onCreate () (это вообще не работает):

       requestWindowFeature (Window.FEATURE_INDETERMINATE_PROGRESS ); 

      • Получение сериализуемых данных (не всех, а некоторой части) в AsyncTask в первом Activity и их передача второму как дополнительный. Это действительно не сработало, поскольку ProgressDialog , который я создал в onPreExecute () , не отображался сразу (кажется, задерживается обработкой, выполненной в doInBackground () ] по какой-то причине.)

      Вот код для этого:

      AsyncTask<String, Void, String> read = new AsyncTask<String, Void, String>() {
          Dialog progress;
      
          @Override
          protected void onPreExecute() {
              progress = ProgressDialog.show(SearchActivity.this, 
                      "Loading data", "Please wait...");
              super.onPreExecute();
          }
      
          @Override
          protected String doInBackground(String... params) {
              DatasetReader reader = new DatasetReader();
              reader.setFundID(params[0]);
              reader.addDatsets(FundProfile.datasets);
              reader.populate();
              return reader.toString();
          }
      
          @Override
          protected void onPostExecute(String result) {
              super.onPostExecute(result);
              progress.dismiss();
          }
      };
      read.execute(selectedItem.getUniqueID());
      try {
          action = new Intent(SearchActivity.this, FundProfile.class);
          action.putExtra("data", read.get());
      } catch(Exception ex) {
          ex.printStackTrace();
      }
      
      • Во втором методе Activity onCreate () (это вообще не работает):

         requestWindowFeature (Window.FEATURE_INDETERMINATE_PROGRESS );
        setProgressBarVisibility (true); 

      Вот метод onCreate () для второго подхода:

      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          this.setTitleColor(Color.WHITE);
          requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
          setProgressBarVisibility(true);
      
          try {
              setContentView(R.layout.fund_profile);
              // init some data
              setProgressBarVisibility(false);
          } catch(Exception ex) {
              FundProfile.this.finish();
          }
      }
      
20
задан Octavian A. Damiean 1 February 2011 в 21:31
поделиться