[안드로이드 스튜디오] 프래그먼트 간 전환시 전환이 한번밖에 되지않는 문제
조회수 1204회
Navigation Drawer에서 뷰페이저를 사용하고 페이지는 프래그먼트를 사용하였고 프래그먼트에 표현할 아이템은 리사이클러뷰를 사용하여 아이템을 표시했습니다. 아래와 같은 사진입니다. 영화목록 화면입니다
이 사진에서 상세보기 버튼을 선택하면, 프래그먼트가 전환되면서 아래와 같은 사진이 뜹니다. 상세보기화면입니다
프래그먼트 간의 전환인 여기까지는 문제없이 실행이 됩니다. 문제는 상세보기화면에서 영화목록화면으로 돌아가 다시 상세보기 버튼을 눌렀을때 이 프래그먼트가 다시 뜨지를 않습니다.. 즉
네비게이션 드로어이므로 상세보기 화면에서 이 메뉴를 통해 영화목록으로 돌아간후 다시 상세보기 버튼을 누르면 상세보기 화면이 뜨지를 않습니다.. 이유를 잘 모르겠습니다.. 화면전환 함수에 log.d를 찍어 출력이 확인해봤으나 버튼클릭시 호출은 되는걸 확인했습니다...
뭐가 문제일까요..? 프래그먼트간 전환이므로 내비게이션 드로어 자바파일에서 전환 함수를 만들어 프래그먼트에서 호출하는 방식으로 했습니다.
NavigationDrawer.java
// 상세보기화면으로 전환하는 화면
public void replaceFragement() {
getSupportFragmentManager().beginTransaction().replace(R.id.nav_host_fragment, movieDetailFragment).commit();
Log.d("METHOD", "replaceFragement: 호출확인");
}
MovieFragment.java
public class MovieFragment extends Fragment {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public View onCreateView(final LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ViewGroup rootView =(ViewGroup)inflater.inflate(R.layout.fragment_movie, container, false);
items = new ArrayList<>();
pager = rootView.findViewById(R.id.pager);
adpater = new MovieListAdapter();
items.add(addMovieList(1)); // 편의상 1페이지부터라고 칭함
items.add(addMovieList(2));
items.add(addMovieList(3));
adpater.setItems(items); // ArrayList<MovieViewModel>을 통째로 전달
adpater.notifyDataSetChanged();
pager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
pager.setClipToPadding(false);
pager.setClipChildren(false);
pager.getChildAt(0).setOverScrollMode(RecyclerView.OVER_SCROLL_NEVER);
pager.setOffscreenPageLimit(items.size());
pager.setAdapter(adpater);
// 뷰페이저 좌우 프리뷰 구현
CompositePageTransformer compositePageTransformer = new CompositePageTransformer();
compositePageTransformer.addTransformer(new MarginPageTransformer(8));
pager.setPageTransformer(compositePageTransformer);
// 상세보기 버튼 구현
adpater.setOnItemClickListener(new MovieListAdapter.OnDetailBtnClickListener() {
@Override
public void OnItemCick(View v) {
MovieList movieList = (MovieList) getActivity(); // 이 프래그먼트가 올라가있는 액티비티 참조
movieList.replaceFragement(); // 상세화면보기로 교체하기
}
});
return rootView;
}
xml파일은 따로 올리지 않겠습니다ㅜ 원인좀 파악해주시면 감사하겠습니다. 혹시 어댑터 코드도 필요하시면 올려드리겠습니다
아 그리고 한가지 더..몰랐었는데 상세보기 버튼을 누르면
E/RecyclerView: No adapter attached; skipping layout
라는 문구가 뜨는걸 확인했습니다. 프래그먼트를 전환하거나 앱이 안된다거나
그런문제는 없지만..빨간색으로 뜨길래 뭔가해서 구글링했더니 어댑터와 관련이 있네요...
일단 앱 실행에는 지장이 없지만 혹시 이것과 관련이 있나해서
올려드립니다
감사합니다.
댓글 입력