"ProgressThings"に時間があります。私は、ビューの内容を動的に変更するアプリケーションを持っています(ビュー自体も変更、消滅、再追加などがあります)。主な活動の特定の「スタイル」を担当するクラスがいくつかあります。そのうちの1人がXMLファイルをダウンロードして解析し(これを処理する特定のクラスがあります)、ダウンロードした内容に基づいてユーザーにいくつかのコンテンツを表示します。Android - 非ブロッキング回転ProgressDialog
とにかく、私の問題はProgressDialogを非ブロックにして、ユーザーが待っている間に他のアプリの機能とやり取りできるようにしたいということです。私はこの問題に関連するいくつかの答え(例えばthis oneのようなもの)を読んだが、これまで成功していない。 "setIndeterminate(true)"(紡績スタイルが必要)のProgressBarに変更することは機能していません(単に表示されません)。
プライベートクラスは私がProgressDialogを表示するために使用するクラスです。それは私が掲示した方法で働いていますが、それはUIインタラクション= /をブロックしています。
private class DownloadXmlTask extends AsyncTask<String, Void, Boolean> {
private ProgressDialog mProgress;
private int xmlType = 0;
XmlHandler xmlHandler = null;
DownloadXmlTask(){
xmlHandler = new XmlHandler();
}
@Override
protected void onPreExecute(){
mProgress = new ProgressDialog(context);
mProgress.getWindow().setGravity(Gravity.CENTER);
mProgress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mProgress.setIndeterminate(true);
mProgress.setMessage("Carregando...");
mProgress.show();
}
@Override
protected Boolean doInBackground(String... urls) {
int count = urls.length;
for(int i=0; i<count; i++){
parseXml(urls[i]);
}
return true;
}
@Override
protected void onPostExecute(Boolean result) {
if(result == true){
mProgress.dismiss();
// Do something else
}
}
/**
* Parses the xml defined by the parameter's String
* @param urlString The url's String
*/
private void parseXml(String urlString){
try {
// Loads the url
URL url = new URL(urlString);
// Initializes the parser
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
// Sets the handler
XMLReader xr = sp.getXMLReader();
xr.setContentHandler(xmlHandler);
// Parses
xr.parse(new InputSource(url.openStream()));
}catch(Exception e) {
// To something here
}
}
}
PS:それは必要ではないため、私はXmlHandlerクラスのコードを入れていない; P
PS2:任意の助けを事前に感謝:D
しかし、ProgressDialogの代わりに必ずProgressBarが必要です。 – ernazm
ええと...そして、ProgressDialogの代わりに 'ProgressBar'を使用しようとしましたが、進歩は単に出現していないと言いました。私は 'ProgressBar'でいくつかの可能性を試しました...私は本当に何か間違っていなければなりません。 私は次のようなものを試しました: 'mProgress = new ProgressBar(context); mProgress.setIndeterminate(true); mProgress.setVisibility(View.VISIBLE); '、そしてジョブが終了すると' mProgress.setVisibility(View.GONE); 'が使用されましたが、表示されません。そしてそれは単なる進歩であるため、私はAsyncTaskの 'publishProgress'のようなものは必要ないと思っています。 – Alesqui