3

クラスを作成し、ビューから拡張します。Runnableインターフェースも実装しました。onTouchEventで、私は次のように呼び出しますnew Thread(this).start()
これは私のクラスです:

public class test extend View interface Runnable{

    ----some code------

    public void onTouchEvent(MotionEvent event){
        ----somecode------
        new thread(this).start();
        ----somecode------
    }

    public void run(){
        -----somecode-------
        invalidate();
        -----somecode-------
    }
}

しかし、私はこのエラーを受け取ります:

ビュー階層を作成した元のスレッドのみがそのビューにアクセスできます

どうすればこれを修正できますか?

4

6 に答える 6

1

UIThread で UI を更新する必要がある場合は、使用します

Activity activity = (Activity)getContext();
activity.runOnUiThread(new Runnable() {
    @Override
    public void run() {
        // update UI here
        invalidate();
    }
});
于 2012-12-17T14:24:00.260 に答える
1

使ってみて

postInvalidate()

それ以外の

無効にする()

于 2012-12-17T14:31:56.097 に答える
0

ハンドラークラスを使用して、メッセージを送信することでUIスレッドに変更を加えることができます。

http://developer.android.com/reference/android/os/Handler.html

Android、ハンドラーメッセージング

于 2012-12-17T14:26:11.773 に答える
0

UI-thread にバインドするクラスを拡張しているViewため、このクラスで呼び出すものはすべて UI-thread で実行されます。ただし、そのクラス内で新しいスレッドを使用している場合は、ビューのUI-threadpost(Runnable)での実行が保証されるそのメソッドに依存できます。例えば:

post(new Runnable() {

    @Override
    public void run() {
        // TODO Auto-generated method stub

    }
});
于 2012-12-17T14:35:27.293 に答える
0

これは View クラスの UI スレッドで実行されます。

  post(new Runnable() {     
        @Override
        public void run() {
            // TODO Auto-generated method stub

        }
    });
于 2012-12-17T14:36:31.630 に答える