마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

fragment <-> ViewPager

0 추천
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".MainActivity"
    tools:ignore="HardcodedText"
    tools:openDrawer="start">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@color/colorPrimary"
            android:elevation="4dp"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

        <FrameLayout
            android:id="@+id/fragment_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <androidx.viewpager.widget.ViewPager
                android:id="@+id/pager"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:clipToPadding="false"
                android:paddingStart="40dp"
                android:paddingEnd="40dp">
            </androidx.viewpager.widget.ViewPager>



        </FrameLayout>

    </LinearLayout>

    <com.google.android.material.navigation.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:headerLayout="@layout/nav_header"
        app:menu="@menu/drawer_menu" />

</androidx.drawerlayout.widget.DrawerLayout>

현재 제가 메인액티비티 화면에 툴바와 나머지 화면을 프래그먼트로 구성하여 총 6개의 영화목록 프래그먼트를 뷰페이저로 만들었습니다. 

어플리케이션을 실행하고 뷰페이저가 제대로 작동하고 있는데 네비게이션에서 다시 영화 목록 아이템을 눌렀을 때 영화 목록을 불러오지만 뷰페이저가 실행이 되질 않네요 무슨 문제인가요?... 도저히 모르겠네요 

        //뷰 페이저
        pager = (ViewPager) findViewById(R.id.pager);
        pager.setOffscreenPageLimit(6);
        adapter = new MoviePagerAdapter(getSupportFragmentManager());

        FragmentMovieOne fragment1 = new FragmentMovieOne();
        adapter.addItem(fragment1);

        FragmentMovieTwo fragment2 = new FragmentMovieTwo();
        adapter.addItem(fragment2);

        FragmentMovieThr fragment3 = new FragmentMovieThr();
        adapter.addItem(fragment3);

        FragmentMovieFou fragment4 = new FragmentMovieFou();
        adapter.addItem(fragment4);

        FragmentMovieFiv fragment5 = new FragmentMovieFiv();
        adapter.addItem(fragment5);

        FragmentMovieSix fragment6 = new FragmentMovieSix();
        adapter.addItem(fragment6);

        pager.setAdapter(adapter);

 

 

    //네비게이션 드로우 안에 아이템들이 눌렸을때
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.nav_message:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        new FragmentMovieOne()).commit();
                break;
        }
        drawer.closeDrawer(GravityCompat.START); //  close draw on left side
        return true;
    }

 

로논 (360 포인트) 님이 2022년 1월 24일 질문

1개의 답변

0 추천
FragmentPagerAdapter는 deprecated되었습니다.(https://developer.android.com/reference/kotlin/androidx/fragment/app/FragmentPagerAdapter.html) ViewPager대신에 ViewPager2를 사용하시길 추천합니다. 간단하게는 성능면에서 ViewPager2가 향상이 되었고 ViewPager2가 좀 더 액티브하게 유지보수가 되고 있습니다.

https://developer.android.com/training/animation/vp2-migration

ViewPager는 문서를 살펴보면 getItem과 getItemCount를 오버라이드 하라고 나오는데요. addItem을 사용하신 부분은 다시 확인을 해보시길 바랍니다. 개발자 문서를 꼼꼼히 읽어보시길 권장드립니다.

개발자 문서가 제일 정확하니 최대한 참조하세요.
spark (227,530 포인트) 님이 2022년 1월 24일 답변
spark님이 2022년 1월 25일 수정
...