Предполагая, что вы используете AsyncTask, вы можете создать функцию обратного вызова в деятельности B, которую вы называете в onPostExecute из AsyncTask прохождения загруженных данных в деятельности В. Таким образом вам нужно всего лишь поместить диалог загрузки в действие B onCreate и позаботиться о загрузке данных в обратном вызове.
A:
public class ActivityA extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a);
//start download task
ActivityB b = new ActivityB();
startActivity(new Intent(getApplicationContext(), b.getClass()));
new Task(b.new DownloadCallback()).execute();
}
}
B:
public class ActivityB extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
}
@Override
public View onCreateView(String name, Context context, AttributeSet attrs) {
//show a progress dialog
return super.onCreateView(name, context, attrs);
}
private void loadData(/*Your data*/){
//Load your data
System.out.println("data loaded");
}
public class DownloadCallback {
public void onFinish(/*Your data*/) {
loadData(/*Your data*/);
}
}
}
Задача:
public class Task extends AsyncTask<Void, Void, Object>{//Change the Object to whatever your data is
private DownloadCallback callback;
public Task(DownloadCallback callback) {
this.callback = callback;
}
@Override
protected Object doInBackground(Void... params) {
//Download data here
//Change the Object return value to whatever your data is
return true;
}
@Override
protected void onPostExecute(Object result) {
//Change the Object to whatever your data is and pass to the finish method
callback.onFinish(/*Your data*/);
}
}
Начало деятельности A (заставка), начните загрузку, когда загрузка будет завершена, завершите операцию A и начните действие B – mihail
Это будет плохой дизайн. Вы не должны выполнять длительный процесс ожидания в потоке пользовательского интерфейса, что приведет к ANR. Одним из решений может быть создание asynctask для загрузки в Activity A, и после завершения загрузки вызовите Activity B, передавая загруженные данные. – Anirudh
Чтобы ответить на другой вопрос, вы всегда можете обновить существующий вид с помощью новой информации, вызвав метод invalidate() для представления. В случае ListView вызовите метод notifyDataSetChanged() для ArrayAdapter. – Anirudh