我的工作需要按此顺序完成:
在主要活动中: - 显示进度对话框 - 从Web获取和解析XML -dismiss对话框 - 切换到ListView活动,该活动在第一个活动中使用来自解析的XML的数组
我的问题是因为我在主要活动ASyncTask中进行了提取/解析工作 立即尝试加载新活动,即使我需要首先完成提取/解析工作,因为它获取了listView(新活动)的数据。在ASyncTask工作完成之前,如何确保新的Activity不会加载?
以下是我正在使用的示例:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button submit = (Button) findViewById(R.id.submitButton);
submit.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
EditText text = (EditText) findViewById(R.id.entry);
input = text.getText().toString();
input = input.replace(" ", "%20"); //replace spaces with %20 for URL specification
WeatherRetrievalTask wt = new WeatherRetrievalTask();
wt.execute();
Bundle bun = new Bundle();
bun.putParcelableArray("in", (Parcelable[])weather);
Intent myIntent = new Intent(view.getContext(), WeeklyDisplayActivity.class);
myIntent.putExtras(bun);
startActivityForResult(myIntent, 0);
}
});
}
*忽略此捆绑工作,因为这是我需要提出的另一个问题的主题......
因此startActivityForResult需要等到ASyncTask完成并且对话框在运行之前被解除,因为它首先需要天气数据才能填充列表视图。
答案 0 :(得分:0)
您应该在ASyncTask中的onPostExecute()中执行“切换到ListView活动”。
不要编写代码,它将在调用execute()之后使用ASyncTask的结果,因为它将在完成asynctask之前执行,asynctask将作为另一个线程使用。
那些需要在其onPostExecute()方法中使用asynctask doinbackground()结果的工作