3

メインThreadは から拡張されActivity、異なる UDP ソースからデータを収集する 2 つの非同期タスクを開始します。このタスクの 1 つは、このグラフ描画ライブラリにデータを追加する必要があります。onPostExecuteのセクションから UI を更新していますAsynTask

@Override
protected void onPostExecute(Integer result) {
    super.onPostExecute(result);
    edt2.setText(Integer.toString(result));
    // Graph Update
    if (graphActive) {
        exampleSeries1.appendData(ATList.get(ATList.size()-1), true);
    } else {
        //do nothing
    }
}

データはグラフに渡され、ディスプレイ上で指でクリックすると正しく表示されますが、ソフトウェアでグラフを自動的に更新する必要があります。テキストフィールドは自動的にedt2更新されます。

私は次のことを試しました:

layout.postInvalidate(); //and invalidate

Android を作成して GraphView を更新する方法がわかりません。

これは、XML のそれぞれの部分です。

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/graph1"
    android:layout_width="match_parent"
    android:layout_height="305dp" >

</LinearLayout>

ご助力ありがとうございます!

4

3 に答える 3

3

@Rishabhによる答えは正しくありません。onPostExectureとは両方ともonProgressUpdateUIスレッドで呼び出されます。受け入れられた解決策は、元のトラックよりも扱いにくいものです。つまり、で更新しonPostExecuteます。それを行うことは絶対にエレガントな方法です。ここに電話したくないrunOnUiThread

@weakwireが言ったように、グラフを無効にすることは正しい方法であり、レイアウトを無効にすることではありません。とにかく、受け入れられた答えは、バックグラウンドでタスクを実行し、結果でUIを更新するAndroidの方法ではありません。

于 2012-09-17T05:15:03.230 に答える
0

AsyncTask は Ui スレッドではなく、Asynctask の代わりに runOnUiThread(..) を使用します。

1 rl-: 親ビュー。2 myView -: 子ビュー

// このメソッドを使用 //

    runOnUiThread(new Runnable() {

        //@Override
        public void run() {
            // TODO Auto-generated method stub
            rl.addView(new myView(getApplicationContext()));
        }
    });
于 2012-09-16T12:33:16.507 に答える