11

状況

SharedPreferences を使用して 2 つの「レイアウト」を持つかなり単純なアプリがあります。

  • Main.xml
  • 設定.xml

Main には、SharedPreferences の getString を使用する textView があります。設定を開くボタンもあります。

設定には、SharedPreferences に保存するためのスピナーとボタンがあります。


onCreate(Bundle savedInstanceState) 内で setText() を呼び出しているときにアプリが読み込まれると、textView が更新されます。

問題

設定を開いて SharedPreferences を更新したら、[戻る] ボタンを使用してメインに戻ります。

onCreate() 内で setText() を呼び出しているため、textView は、アプリを終了してアプリを再度メインに開くまで更新されません。

設定から戻った後、textView を更新するにはどのような方法を使用する必要がありますか?

私のリクエストは、iOS の viewWillAppear() に似ています。

4

4 に答える 4

20

onCreate() は、アクティビティが最初に開始されたときに 1 回だけ呼び出されます。アクティビティがアクティブになるたびにテキストを更新したい場合は、代わりに onResume() を使用できます。アクティビティのライフサイクルの詳細については、こちらを参照してください

于 2011-12-07T18:58:36.103 に答える
1

を作成することもできますOnSharedPreferenceChangeListener。に登録してActivity.onCreate()くださいPreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener()。また、で登録を解除Activity.onDestroy()PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener()ます。

于 2011-12-07T19:46:25.663 に答える
0

また、startActivityForResult で設定アクティビティを開始し、メイン アクティビティに onActivityResult メソッドを実装することもできます

于 2011-12-07T19:01:21.410 に答える
-3

私が見つけた最善の解決策は、 onVisibilityChanged をオーバーライドすることです

@Override
protected void onVisibilityChanged(View changedView, int visibility){
    super.onVisibilityChanged(changedView, visibility);
    if(visibility==VISIBLE ){
        Log.v("View will appear", "");  
    }
    else{
        Log.v("View will disappear", "");   
    }
}
于 2012-04-13T15:50:10.430 に答える