[Android]BottomNavigationでページを切り替えたときにviewの内容を保存したい
課題
androidのBottomNavigationを使用したアプリを作っている。ページを移動して戻って来た時にTextViewなどに書き込んだデータを保存しておきたい。
問題点
通常ActivityやFragmentを離れて戻って来た時にviewの内容などを保存したいときはonSaveInstanceState()でBundleにデータを保存し、戻って来た時にonCreateView()などで再度値をセットする、という手法をとる。しかし、BottomNavigationによるページの切り替えの際はonSaveInstanceState()は呼ばれない。
対策
BottomNavigationを実装しているActivity(今回はMainActivity)内に値を保持する用のpublic変数を定義する。各FragmentのonPause()でこのpublic変数に値をセットする処理を入れ、戻って来たときはこのpublic変数から値を取り出せばよい。
MainActivity.java
public class MainActivity extends AppCompatActivity {
public static Bundle args;
public static Bundle get_args(){
return args;
}
public static void setArgs(Bundle args_in){
args=args_in;
}
}
Fragment.java
public void onPause() {
Bundle args;
//argsにデータを入れる処理
MainActivity.setArgs(args);
super.onPause();
}
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
Bundle args=MainActivity.get_args();
//argsからviewにデータをセットする処理
}
ただし、このように複数のモジュールからアクセスできるpublic変数に値を持たせることは本当は良くない。BottomNavigationをカスタマイズして対応するのが一番本質的な解法らしいが、相当大変そうだったので今回は妥協してしまった、、、
最新記事
すべて表示はじめに google play storeにアプリをアップロードしようとしたら下記のエラーが発生 現在、お客様のアプリは API レベル 31 を対象にしています。セキュリティとパフォーマンスが最適化された最新の API を利用するには、API レベル 33...
現象 SQLiteDataBaseをContentProviderで読み取ってRecyclerViewに一覧表示している。データベースの内容を更新してもそれがRecyclerViewに反映されない。 原因 ContentProviderのquery()メソッドでsetNot...
Comments