У меня есть 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();
}
}