안녕하세요.
조금 오래된 안드로이드 버전에서 플래그먼트 갱신하는 방법을 공유해보고자 합니다.
별것 아닐 수 있는데, 몇 곳 사이트에 알려주는 방법들을 사용해 보니 작동하지 않아서 저와 같은 방법으로 할 경우 될 수도 있지 않을까 해서 공유합니다.
우선 구글에 플래그먼트 새로고침이라고 검색하면 답변들이 주로 아래와 같은 코드로 알려주었습니다.
방법 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();
쉽게 생각해서 트랜잭션 만들고 원하는 플래그먼트 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() 함수에서 처리되도록 하였습니다.
이렇게 해서 되는 경우도 있구나 참고하시면 될 듯합니다.
감사합니다.
반응형
'Programming > Android' 카테고리의 다른 글
exposed beyond app through ClipData.Item.getUri() 에러 발생시 (0) | 2024.12.26 |
---|---|
안드로이드 앱에서 오버레이 화면 사용하는 방법 (0) | 2024.12.23 |
AndroidUSBCamera:libausbc:3.2.8 버전에서 Received status code 401 from server: Unauthorized에러 발생 시 (2) | 2024.12.11 |