[안드로이드 스튜디오] 프래그먼트 간 전환시 전환이 한번밖에 되지않는 문제

조회수 1200회

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

라는 문구가 뜨는걸 확인했습니다. 프래그먼트를 전환하거나 앱이 안된다거나

그런문제는 없지만..빨간색으로 뜨길래 뭔가해서 구글링했더니 어댑터와 관련이 있네요...

일단 앱 실행에는 지장이 없지만 혹시 이것과 관련이 있나해서

올려드립니다

감사합니다.

  • 올라와있는 코드만으로는 파악하기가 쉽지 않을것같습니다. 프래그먼트의 인스턴스와 프래그먼트매니저의 쿼리에 문제가 있을것이 가장 유력해 보입니다. 김은기 2020.10.14 14:45

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)