1

私はこれがよくある質問であることを知っています..私はこのサイトと多くのチュートリアルを何度も読みましたが、仕事をする機会がありません.

コードは次のとおりです。

public class mostraRisultatiActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mostra_risultati);

    int cnt = 0;
    final TableLayout tl = (TableLayout) findViewById(R.id.tabellaRisultati);

    for (Esame e : Db.risposteDate){
        TableRow tr = new TableRow(this);

        TextView lbl1 = new TextView(this);
        TextView lbl2 = new TextView(this);
        TextView lbl3 = new TextView(this);
        tr.setGravity(Gravity.CENTER);
        lbl1.setGravity(Gravity.CENTER_VERTICAL);
        lbl3.setGravity(Gravity.CENTER);

        lbl1.setTextColor(android.graphics.Color.RED);
        lbl2.setTextColor(android.graphics.Color.RED);
        lbl3.setTextColor(android.graphics.Color.RED);

        lbl1.setLayoutParams( new TableRow.LayoutParams( 0, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, 1 ) );
        lbl2.setLayoutParams( new TableRow.LayoutParams( 0, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, 7 ) );
        lbl3.setLayoutParams( new TableRow.LayoutParams( 0, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, 1 ) );

        lbl1.setText(e.getDomandaNum()+"");
        lbl2.setText(Html.fromHtml(e.getTesto()+"<br />"));
        lbl3.setText(e.getRispostaData());

        tr.addView(lbl1);
        tr.addView(lbl2);
        tr.addView(lbl3);
        tl.addView(tr);
        if (e.getRispostaData() != null && e.getRispostaData().equals(e.getRispostaReale())){
            cnt++;
            lbl1.setTextColor(android.graphics.Color.GREEN);
            lbl2.setTextColor(android.graphics.Color.GREEN);
            lbl3.setTextColor(android.graphics.Color.GREEN);
        }
    }
    double percentualeSucceso = (cnt*100)/Db.risposteDate.size();

    final TextView risposteTotTV = (TextView) findViewById(R.id.risultatiTot);
    final TextView riassuntorisTV = (TextView) findViewById(R.id.risRiassunto);
    final TextView esitoTV = (TextView) findViewById(R.id.esito);

    risposteTotTV.setText(Html.fromHtml("<b><big>TOT</big></b>" +  "<br />" + 
            Db.risposteDate.size()));
    riassuntorisTV.setText(Html.fromHtml("<b>Risposte corrette: </b>" +cnt+  "<br />" + 
            "Percentuale: "+percentualeSucceso+"%"));
    if (percentualeSucceso >= 90) {
        esitoTV.setText(Html.fromHtml("<b><big>Esito</big></b>  <br />" + 
                                      "<small>PROMOSSO</small>"));
    } else {
        esitoTV.setText(Html.fromHtml("<b><big>Esito</big></b>  <br />" + 
                                      "<small>BOCCIATO</small>"));
    }

}

}

UI のロード中にプログレス バーが必要です (特に for ループ)。

私はスレッドで試しました:すべての作業ですが、UI が読み込まれるまで進行状況が表示されません (役に立たない) asyncTask で試しましたが、常に例外がクラッシュしました。

何か案が?

4

2 に答える 2

0

さて、私はこのソリューションを非常に基本的な でテストしただけですが、うまくいきましたButton

Viewsを使用して の作成とセットアップを行うことができますAsyncTaskViewビューをレイアウトに追加するまで、ボタンと、AsyncTask で問題なく作業を変更/作成する呼び出しを試しました。追加したら、UI スレッドで変更を行う必要があります。したがって、すべての設定は で行われdoInBackground()、すべてのaddView()呼び出しは で行われonPostExecute()ます。その後onPostExecute()、ビューへの変更は AsyncTask で行う必要があります。

于 2012-09-24T18:09:39.777 に答える
0

答えはあなたができないです!ProgressDialog の進行状況を確認するには、UI スレッドで実行する必要があります。また、UI の作成は既に UI スレッドで実行されているため、進行状況ダイアログが応答していないように見えます。また、AsyncTask を使用して UI を作成することはできません。常に「間違ったスレッドから呼び出されました」という例外が発生します。つまり、UI スレッドで UI を構築する必要があります。

私は通常、UI の読み込み中にスプラッシュ スクリーンを表示し、他のすべての準備が整ったらそれを削除します。

于 2012-09-24T17:39:14.953 に答える