행복한 하루

플래그먼트 갱신,새로고침 하는 방법 (fragment refresh) 본문

Android/안드로이드 프로그래밍

플래그먼트 갱신,새로고침 하는 방법 (fragment refresh)

변화의 물결 2020. 9. 2. 10:22

안녕하세요.

안드로이드에서 플래그먼트 갱신하는 방법을 공유해보고자 합니다.

별것 아닐 수 있는데, 사이트에서 여러 사이트에 알려주는 방법들을 사용해보니 작동하지 않아서 

저와 같은 방법으로 할 경우 될 수도 있지 않을까 해서 공유합니다.

 

우선 구글에 플래그먼트 새로고침이라고 검색하면 답변들이 주로 아래와 같은 코드로 알려주었습니다.

방법 1)

플래그먼트 새로고침 1

 

방법 2)

// Reload current fragment Fragment frg = null;

frg = getSupportFragmentManager().findFragmentByTag("Your_Fragment_TAG");

final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

ft.detach(frg);

ft.attach(frg);

ft.commit();

stackoverflow.com/questions/20702333/refresh-fragment-at-reload

 

Refresh Fragment at reload

In an android application I'm loading data from a Db into a TableView inside a Fragment. But when I reload the Fragment it displays the previous data. Can I repopulate the Fragment with current data

stackoverflow.com

 

 쉽게 생각해서 트랜잭션 만들고 원하는 플래그먼트 this 대신에 넣으면 갱신되는 것 아닌가 했는데,

... mFragment  NULL point 에러라고 발생하더라고요. 

 

 그래서 이래저래 작동된 방법입니다. 

 

 

//MainActivity 안에 플래그먼트 관리하는 클래스 만들어줍니다.
...

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

        private final List<String> mFragmentTitleList = new ArrayList<>();
        private FragmentManager mFM;
        public MyPagerAdapter(FragmentManager fm) {
            super(fm);
            mFM = fm;
        }

        public void addItem(Fragment item, String title) {
            items.add(item);
            mFragmentTitleList.add(title);

        }

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

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

        @Override
        public CharSequence getPageTitle(int position) {return mFragmentTitleList.get(position);}

        public FragmentManager getFM() {
            return mFM;
        }
    }

...

pager = findViewById(R.id.container);
        pager.setOffscreenPageLimit(5);

        adapter = new MyPagerAdapter(getSupportFragmentManager());

        Fragment1 fragment1 = new Fragment1();
        adapter.addItem(fragment1, "Fragment 1");
        
...       

		pager.setAdapter(adapter);

        TabLayout tabs = (TabLayout) findViewById(R.id.tabs);
        tabs.setupWithViewPager(pager);

...


				//Fragment refresh
                FragmentTransaction ft =  adapter.getFM().beginTransaction();
                ft.detach(adapter.getItem(0)).attach(adapter.getItem(0)).commit();

...

 

플래그먼트 관리 클래스 내에서 불러서 사용한 경우 새로고침이 되었습니다.

새로고침을 한 곳은 MainActivity에서 설정 Activity를 호출하였고, 설정이 완료를 누르면 Fragment1 갱신되도록 

MainActivity의 onActivityResult() 함수에서 처리되도록 해주었습니다.

 

 이렇게 해서 된 경우도 있구나 참고하시면 될듯합니다.

 

감사합니다.

Comments