ViewModel を共有して、フラグメント間でデータを使いまわしていきます。
環境
- Windows 11 Home 21H2
- Android Studio Bumblebee | 2021.1.1 Patch 1
- 言語:Java
- SDKバージョン:API 30 Android 11.0 (R)
手順
プロジェクト作成
今回は Navigation Drawer Activity のテンプレートを使っていきます。最初から Fragment と ViewModel があるので、動作確認が簡単です。


ViewModel共有
MainActivity と 各Fragment で ViewModel を共有するように設定していきます。
MainActivity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MainViewModel viewModel = new ViewModelProvider(this).get(MainViewModel.class);
/*** 省略 ***/
}
/*** 省略 ***/
}
Fragment
public class HomeFragment extends Fragment {
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
MainViewModel viewModel = new ViewModelProvider(requireActivity()).get(MainViewModel.class);
/*** 省略 ***/
}
/*** 省略 ***/
}
データ共有
ViewModel内のデータを、各Fragmentで参照する設定にします。
final TextView textView = binding.textHome;
textView.setText(viewModel.Text);
確認
各Fragmentで同じ値が表示される。

