1

TabView を使用してデータを表示するアプリ。TabActivity の 1 つは JSONArray に対応しており、そのうちの 1 つは GoogleMap です。それらのいずれかをクリックすると、アプリが数秒間停止してからコンテンツが表示されます。だから私は質問があります - ProgressBar で即座に開始する方法と、データがロードされたときにアクティビティのコンテンツを開始する方法です。ProgressBar(この回転するもの)の使い方がまったくわかりません。

前もって感謝します。

4

2 に答える 2

2

AsyncTaskを使用してデータをダウンロードします。これにより、データがダウンロードされるまで UI がフリーズしません。

常に UI スレッドからダウンロード データを分離しようとします。

メソッドを使用onProgressUpdate()して、素敵なプログレスバーを作成できます。

進捗状況を計算できない場合は、タスクを実行して削除する前に、進捗範囲なしでダイアログを有効にする必要がありますonPostExecute()

使用例については、ドキュメントの使用例を参照してください。

public class HomeActivity extends 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>
于 2013-06-07T15:03:54.427 に答える