안드로이드 viewpager질문드립니다.

조회수 1410회
public class MainActivity extends AppCompatActivity {
MovieDetailFragment movieDetailFragment;
MovieInfoFragment movieInfoFragment;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    movieDetailFragment = new MovieDetailFragment();
    movieInfoFragment = new MovieInfoFragment();

    getSupportFragmentManager().beginTransaction().add(R.id.container, movieInfoFragment).commit();
}

public void replaceMovieInfoFragment(){
    getSupportFragmentManager().beginTransaction().replace(R.id.container, movieDetailFragment).addToBackStack(null).commit();
}
}

==============================================================================

public class MovieInfoFragment extends Fragment{

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.movie_info_fragment, container, false);

    ViewPager viewPager = rootView.findViewById(R.id.pager);
    viewPager.setOffscreenPageLimit(5);
    ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager());
    ViewPager1 viewPager1 = new ViewPager1();
    adapter.addItems(viewPager1);
    ViewPager2 viewPager2 = new ViewPager2();
    adapter.addItems(viewPager2);
    ViewPager3 viewPager3 = new ViewPager3();
    adapter.addItems(viewPager3);
    ViewPager4 viewPager4 = new ViewPager4();
    adapter.addItems(viewPager4);
    ViewPager5 viewPager5 = new ViewPager5();
    adapter.addItems(viewPager5);

    viewPager.setAdapter(adapter);



    return rootView;
}

public class ViewPagerAdapter extends FragmentStatePagerAdapter {
    ArrayList<Fragment> items = new ArrayList<Fragment>();


    public void addItems(Fragment fragment) {
        items.add(fragment);
    }

    public ViewPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        return items.get(position);
    }

    @Override
    public int getCount() {
        return items.size();
    }
}

==============================================================================

public class ViewPager1 extends Fragment{

@Override
public void onDetach() {
    super.onDetach();
}

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.view_pager1, container, false);
    Button button = rootView.findViewById(R.id.button2);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ((MainActivity)getActivity()).replaceMovieInfoFragment();
        }
    });

    return rootView;
}
}

============================================================================== ViewPager1에서 버튼을 눌러 movieDetailFragment로 이동 후 뒤로가기를 누르게 되면 movieInfo액티비티에서 Viewpager가 새로 생성이 되지않아 빈화면이 나오게 됩니다. Viewpager를 갱신하거나 새로고침 하는 방법이 있을까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • movieDetailFragment 에서 backkey 를 누르면 MovieInfoFragment 의 onCreateView() 부터 재호출 되므로 갱신이 잘 될것 같은데 이상하네요 ㅜㅜ 일단 MovieInfoFragment 각 lifecycle 에 로그를 넣어서 복귀 시점에 호출이 되고 있는지 확인해보시기 바랍니다 알 수 없는 사용자 2018.7.17 10:40
  • 앱 실행 시점 : onAttach, onCreate, onCreateView, onActivityCreated, onStart, onResume, 버튼 클릭 시점 : onResume, onPause, onStop 뒤로가기 버튼 클릭 : onCreateView, onActivityCreated, onStart, onResume 입니다... 알 수 없는 사용자 2018.7.17 11:05

1 답변

  • 유사하게 테스트 코드를 작성하여 테스트 해봤는데 문제없이 잘 동작하네요..

    일단 작성자님의 코드를 보니 android.app.Fragment 를 사용하고 계신것 같은데 android.support.v4.app package 를 사용하시기 바랍니다. 또한 한가지 의심되는 부분은

    ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager());
    

    이부분인데 getFragmentManager() 가 아닌 getChildFragmentManager() 를 사용해야 할것 같습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

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

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

(ಠ_ಠ)
(ಠ‿ಠ)