我的应用使用TabView显示数据。其中一个TabActivity与JSONArray对应,其中一个是GoogleMap。当我点击其中一个时,应用会停止几秒钟,然后显示内容。所以我有一个问题 - 如何使用ProgressBar立即启动它,当数据加载时,它将启动活动内容。我根本无法得到如何使用ProgressBar(这个旋转的东西)。
提前致谢。
答案 0 :(得分:2)
使用AsyncTask下载您的数据。这样,在下载数据之前,您的UI不会冻结。
始终尝试从UI线程中单独下载数据。
您可以使用onProgressUpdate()
方法创建一个漂亮的进度条。
如果您无法计算任何进度,则应在执行任务并在onPostExecute()
上删除任务之前启用没有进度范围的对话框。
请参阅文档中的用法示例以查看用法示例。
public class 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>
答案 1 :(得分:0)
使用asyncTask
将此代码放在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
}
}