我的应用程序使用 TabView 来显示数据。其中一个 TabActivity 对应 JSONArray,其中一个是 GoogleMap。当我单击其中一个时,应用程序会停止几秒钟,然后显示内容。所以我有疑问 - 如何让它立即从 ProgressBar 开始,并且在加载数据时它会开始活动的内容。我根本不知道如何使用 ProgressBar(这个旋转的东西)。
提前致谢。
我的应用程序使用 TabView 来显示数据。其中一个 TabActivity 对应 JSONArray,其中一个是 GoogleMap。当我单击其中一个时,应用程序会停止几秒钟,然后显示内容。所以我有疑问 - 如何让它立即从 ProgressBar 开始,并且在加载数据时它会开始活动的内容。我根本不知道如何使用 ProgressBar(这个旋转的东西)。
提前致谢。
使用AsyncTask下载您的数据。这样,在下载数据之前,您的 UI 不会冻结。
始终尝试将下载数据与 UI 线程分开。
您可以使用该onProgressUpdate()
方法创建一个漂亮的进度条。
如果您无法计算任何进度,您应该在执行任务并将其删除之前启用一个没有进度范围的对话框onPostExecute()
。
请参阅文档中的用法示例以查看用法示例。
公共类 HomeActivity 扩展 Activity {
private static String url = "address here";
private static final String TAG_CONTENT = "content";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_last_minute);
TextView tv = (TextView) findViewById(R.id.lastMinuteText);
// Create progress dialog
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// Get the layout inflater
LayoutInflater inflater = getLayoutInflater();
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog
builder.setView(inflater.inflate(R.layout.progressdialog, null));
progressDialog = builder.create();
progressDialog.setTitle("Downloading JSON");
progressDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "Whatever",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
// Show dialog
progressDialog.show();
//download json
new downloadJSON().Execute(url);
}
private class downloadJSON extends AsyncTask<String, Void, String> {
private String allMessages = "";
@Override
protected Void doInBackground(String... params) {
String url = params;
//JSON PARSER
JSONParser jParser = new JSONParser();
try {
JSONArray messages = jParser.getJSON(url);
} catch(JSONException e) {
e.printStackTrace();
}
for(int i = 0; i < messages.length(); i++) {
JSONObject c;
try {
c = messages.getJSONObject(i);
allMessages = allMessages + c.getString(TAG_CONTENT) +
"\n-----------------------------------------\n";
} catch (JSONException e) {
e.printStackTrace();
}
}
return allMessages ;
}
@Override
protected void onPostExecute(String result) {
tv.setText(result);
progressDialog.cancel();
}
@Override
protected void onProgressUpdate(Void... values) {
}
}
}
您的对话框(R.layout.progressdialog):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical" >
<ProgressBar
android:id="@+id/progressBar1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
使用异步任务
将此代码放在 oncreate() 方法中
private static ProgressDialog dialog;
LongOperation MyTask= new LongOperation();
MyTask.execute();
dialog = ProgressDialog.show(this, "", "Wait Please");
private class LongOperation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
// Do here what you want Every thing process should be here only
}
@Override
protected void onPostExecute(String result) {
dialog.dissmiss();
//now you can see the result here
}
}