7

私はAndroidでいくつかのUI画面をコーディングしています。いつかUIの変更をすぐに確認する必要がありますが、その変更は次のUIスレッドリクエストで確認できます。したがって、たとえば、画面上のビューを削除してプログラムで別のビューを追加し、次にビュー全体を(viewAnimatorを使用して)変更すると、ビューの削除は監視できますが、新しいビューは監視できません。最初のページに戻ると、新しいビューが画面に表示されているので、新しいビューが追加されていると確信しています。

その効果をすぐに確認するには、画面上のビューの追加または削除を呼び出す必要がある関数はどれですか?

invalidate()を試しましたが、私の場合は機能しません

4

3 に答える 3

6

It sounds like, if you say the UI only updates on the next UI thread request, that you are modifying UI elements from another thread. Therefore, you must modify them in a Runnable using runOnUiThread. So, for example:

//example code
//where you are trying to modify UI components, do this instead
runOnUiThread(new Runnable(){
    public void run(){
        //update UI elements
    }
});
于 2012-09-21T17:07:36.630 に答える
2

ビューの準備ができたらすぐにビューに変更が加えられるようにする最善の方法はRunnable、ビューのメッセージ キューにを追加することです。

view.post(new Runnable(){
    @Override
    public void run() {
        //TODO your code
    }
});
于 2012-09-25T23:52:44.530 に答える
-2

描画可能 (透明であっても) を持たないビュー、または子を持たないビューでは、invalidate() は呼び出されません。setBackgroundDrawable(Color.Transparent) でそれらすべてを変更するか、開発時にダミーの子ビューを追加して変更を観察する必要があります。

また、Android 3 以降ではレンダリング システムが変更されていることに注意してください。親を無効にしても、子が常に無効になるとは限りません。下位バージョンと同じ動作が必要な場合は、ツリー全体を手動で無効にする必要があります

于 2012-09-16T12:06:51.237 に答える