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

ViewPager Fragment 갱신 관련 질문

0 추천

안녕하세요, 현재 ViewPager와 TabLayout을 Fragment 5개와 함께 쓰고 있습니다.

궁금한 것이 1번째, 3번째 화면에서 버튼을 누르면 2번째 화면에 data가 써지고 갱신이 되어야되는데

ViewPager의 특성상 앞뒤 페이지를 미리 그려놓기 때문에

새로 View를 그리기 위해서 getItemPosition()을 사용해 return POSITION_NONE을 해야한다고 봤습니다.

헌데 코드를 어디에 어떻게 바꿔서 넣어야할지 모르겠습니다. 그냥 넣으면 갱신이 안됩니다.

그리고 많이들 notifyDataSetChanged() 쓰시던데, 이것도 써야하나요? 

쓰면 어디에 어떻게 써야할지 알려주세요.

제 Adapter 코드입니다.

 

public class TabPagerAdapter extends FragmentStatePagerAdapter {

    private int tabCount;

    public TabPagerAdapter(FragmentManager fm, int tabCount){

        super(fm);
        this.tabCount = tabCount;

    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }

    @Override
    public Fragment getItem(int position){

        switch (position){
            case 0:
                HomeFragment fragment1 = new HomeFragment();
                return fragment1;

            case 1:
                AccessLogFragment fragment2 = new AccessLogFragment();
                return fragment2;

            case 2:
                RegistrationFragment fragment3 = new RegistrationFragment();
                return fragment3;

            case 3:
                SettingFragment fragment4 = new SettingFragment();
                return fragment4;

            case 4:
                HelpFragment fragment5 = new HelpFragment();
                return fragment5;

            default:
                return null;
        }

    }

    @Override
    public int getCount(){
        return tabCount;
    }

}
yt0229 (1,070 포인트) 님이 2018년 3월 8일 질문

1개의 답변

0 추천
첫번째 세번째 라는건

homeFragment와 RegistrationFragment같은데

2번째인 AccessLogFragment에 notify해주면 된다는 의미로 판단되는데  그렇게 사용하시려면

1. Br로 갱신

2. TabPagerAdapter에 method 추가해서 AccessLogFragment 메서드 호출하여 화면 갱신

3.Rx 사용도 고려 해보세욥
설춘식 (5,250 포인트) 님이 2018년 3월 8일 답변
제가 안드로이드 초보라 Br, Rx 다 무슨 얘긴지 모르겠습니다...
알고 있는건 getItemPosition()을 써야되고 notifyDataSetChanged는 필수 인지 모르겠는데 이걸 어디에 써야되나요? 일단 getItemPosition은 위처럼 어댑터 코드에 넣어놓은 상황인데 처음에 앱 실행할 때만 호출되고 호출이 안되네요. 로그 걸어보니깐..
그리고 notify는 그럼 Access Fragment에 넣어야되나요? override method 보니깐 안뜨던데.. 이건 어디에 넣어야되나요?
답글이 늦었습니다
샘플코드를 짜서 보내드리고픈데 아직 해결이 안되신거면 메일주소 남겨주세욥
yt0229@naver.com 입니다. 메일로 좀 이런 질문도 드려도 될까요??? ㅜ 막혀서 2주째 고생하는데 물어볼 곳이 없네요 ㅜ
현재 ViewPagerAdapter.notifyDataSetChanged()를 viewpager 설정하는 곳에 써놨고, Adapter.java 안에 getItemPosition(){return POSITION_NONE;} 해도 안먹네요.. ㅜ
지금 샘플코드 작업해서 보내드릴께욥~ 심심할때 들어오는거라 바로바로 확인을 못해드렸습니다 ㅠㅠ
...