我从外部服务器获取数据并在android中的列表视图中填充它。在异步任务中我显示'正在加载' UI线程中的对话框.UI还在后台显示两个按钮。单击这些按钮,ListAdapter将附加到列表视图,并显示数据。 但由于后台线程仍在运行,因此列表适配器为空并且不包含任何数据,因此在单击这些按钮时,应用程序崩溃,显示空指针除外。 那么如何在后台线程运行时使背景UI(在“加载对话框”下面的UI)无响应?或者还有其他解决方案吗?
答案 0 :(得分:1)
如果要在运行AsyncTask时停止与UI的所有交互,请显示ProgressDialog并使其不可取消。类似的东西:
public class MainActivity extends Activity {
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
}
class MyAsyncTask extends AsyncTask<Void, Void, Void> {
private ProgressDialog mProgress;
@Override
protected void onPreExecute() {
super.onPreExecute();
// Show ProgressDialog
mProgress = new ProgressDialog(mContext);
mProgress.setCancelable(false);
mProgress.setCanceledOnTouchOutside(false);
mProgress.setTitle("Fetching data");
mProgress.show();
}
...
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
// Hide ProgressDialog when done loading
mProgress.dismiss();
}
}
}
这样,在doInBackground
正在运行时,您的UI将无法点击。
答案 1 :(得分:0)
你肯定应该从头开始为你的ListView添加一个适配器,即使它是空的 然后,当您的AsyncTask完成后,只需更新适配器的内容。