検索
[Android]BottomNavigationでページを切り替えたときにviewの内容を保存したい
- M.R

- 2020年8月15日
- 読了時間: 1分
課題
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をカスタマイズして対応するのが一番本質的な解法らしいが、相当大変そうだったので今回は妥協してしまった、、、
![[Android] TextViewを折り返したときに左右中央揃えにならない](https://static.wixstatic.com/media/90b712_795b2578740242d6b5309c31700a0f49~mv2.png/v1/fill/w_726,h_1438,al_c,q_90,enc_avif,quality_auto/90b712_795b2578740242d6b5309c31700a0f49~mv2.png)






コメント