
현재 이러한 내비게이션 드로어로 구성된 화면이 있습니다.
여기서 영화 포스터가 보이는 해당화면은 프래그먼트이고, 이 프래그먼트는 viewpager2로 구현되어있습니
다. viewpager2를 구성하는 아이템들은 리사이클러뷰로 구성되어있습니다
여기서 상세보기 버튼 클릭시

이러한 화면으로 이동됩니다. 상세보기 화면입니다
이 화면 또한 프래그먼트입니다. 즉 프래그먼트-> 프래그먼트간의 화면전환입니다.
이 화면을 스크롤해 내려보면

이러한 화면이 나옵니다. 모두보기, 작성하기 등 기능들이 있습니다. 모두보기는
모든 리뷰댓글들을 보여주며, 작성하기 버튼은 리뷰를 작성할 수 있는 액티비입니다.
문제는 맨 첫사진인 영화목록 프래그먼트 화면에서 상세보기 화면으로 전환후에

이 햄버거메뉴를 통해 다시 영화목록으로 돌아가고 나서
다시 상세보기 버튼을 누르면 프래그먼트의 전환이 되질 않습니다.
코드입니다.
public class MovieList extends AppCompatActivity implements FragmentCallback {
private AppBarConfiguration mAppBarConfiguration;
MovieDetailFragment movieDetailFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.movie_list);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
AppBarLayout actionBar = findViewById(R.id.appbar);
// movieDetailFragment = new MovieDetailFragment();
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_movie, R.id.nav_gallery, R.id.nav_slideshow)
.setDrawerLayout(drawer)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
}
@Override
public boolean onSupportNavigateUp() {
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
return NavigationUI.navigateUp(navController, mAppBarConfiguration)
|| super.onSupportNavigateUp();
}
// 상세보기화면으로 전환하는 화면
public void replaceFragement() {
// getSupportFragmentManager().beginTransaction().replace(R.id.nav_host_fragment, movieDetailFragment).commit();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
movieDetailFragment = new MovieDetailFragment();
ft.replace(R.id.nav_host_fragment, movieDetailFragment);
ft.addToBackStack(null);
ft.commit();
Log.d("MovieList.java", "replaceFragement() 호출");
}
}
보시면 onCreate() 내에
movieDetailFragment = new MovieDetailFragment();
이 코드가 주석처리 되어있고 replaceFragment()내에도 있는데 onCreate에 있는게 원래 코드입니다
원래 코드로 진행하면 함수호출만되고 프래그먼트의 전환이 이루어지지 않습니다.
원래 코드로 했을때 화면전환이 딱한번만 이루어지고 다시 돌아와서는 왜 안되는지 잘모르겠습니다.
이유좀 알려주세요...ㅜㅜ
그래서 지금 코드처럼 replaceFragment() 옮겼더니 정상적적으로 잘 작동은되나.
함수를 호출할때마다 프래그먼트를 새로 생성해내니 기존에 프래그먼트 전환을해서
썼던 리뷰등이 모두 새로 초기화가 되어버립니다..
어떻게하면 화면전환도 계속되고 전환시에 썼던 리뷰등의 데이터를 유지할 수 있을까요?