Programming/Android

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

변화의 물결1 2024. 12. 28. 00:49

 

 

 

안녕하세요.

 

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

 

별것 아닐 수 있는데, 몇 곳 사이트에 알려주는 방법들을 사용해 보니 작동하지 않아서 저와 같은 방법으로 할 경우 될 수도 있지 않을까 해서 공유합니다.

 

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

 

방법 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();

 

 

 

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() 함수에서 처리되도록 하였습니다.

 

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

 

감사합니다.

 

 

반응형