たとえば 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 つです。
- 代わりにonCreate()でsetThemeを呼び出すか、
- すべてのレイアウトを強制的に再インスタンス化するには、setContentView (R.layout.mainscreen); を再度実行します。