レイアウトビュー全体を強制的に更新するにはどうすればいいですか? 質問する

レイアウトビュー全体を強制的に更新するにはどうすればいいですか? 質問する

たとえば Activity.onResume() メソッドで、メイン レイアウト リソース ビューを強制的に再描画/更新したいのですが、どうすればいいでしょうか?

メイン レイアウト ビューとは、Activity.onCreate() で次のように呼び出されるビュー (以下では「R.layout.mainscreen」) を指します。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mainscreen);
}

ベストアンサー1

質問に厳密に答えるには、invalidate() を使用します。

public void invalidate () 以降: API レベル 1

ビュー全体を無効にします。ビューが表示されている場合は、将来のある時点で onDraw(Canvas) が呼び出されます。これは UI スレッドから呼び出す必要があります。UI 以外のスレッドから呼び出すには、postInvalidate() を呼び出します。

ViewGroup vg = findViewById (R.id.mainLayout);
vg.invalidate();

これで、アクティビティが再開すると、すべてのビューが描画されます。invalidate() を呼び出す必要はありません。テーマを適用するには、ビューが描画される前、つまりsetContentView(R.layout.mainscreen);

public void setTheme (int resid) 以降: API レベル 1

このコンテキストの基本テーマを設定します。コンテキストでビューがインスタンス化される前 (たとえば、setContentView(View) または inflate(int, ViewGroup) を呼び出す前) にこれを呼び出す必要があることに注意してください。

API ドキュメントリファレンスはここにあります:http://developer.android.com/reference/android/view/ContextThemeWrapper.html#setTheme%28int%29

onDraw() メソッドは既にインスタンス化されたビューで機能するため、setTheme は機能しません。私自身はテーマの経験はありませんが、考えられる代替オプションは次の 2 つです。

  1. 代わりにonCreate()でsetThemeを呼び出すか、
  2. すべてのレイアウトを強制的に再インスタンス化するには、setContentView (R.layout.mainscreen); を再度実行します。

おすすめ記事