Programing/android
[android] tab과 fragment 사용
Benedictus711
2022. 4. 3. 17:51
728x90
안드로이드 탭 클릭시에 fragment를 사용하여 화면전환을 하도록 처리하였다.
그런데 화면에서 검색기능 호출 후 다시 돌아올 경우 replace만 사용하여 화면을 전환효과를 주었더니
이전 화면의 잔상처럼 2개의 화면이 겹치는 오류가 발생하였다.
잘못 만들었다.
다시 탭 구성을 하였다.
기존 코드에서
//각 fragment 페이지 초기화
fragment1 = new fragment1();
fragment2 = new fragment2();
fragment3 = new fragment3();
//tab setting
getSupportFragmentManager().beginTransaction().add(R.id.container, fragment1).commit();
//화면 전환시
getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment2).commit();
탭 구성을 변경하였다.
//각 fragment 페이지 초기화
Fragment1 fragment1 = new Fragment1();
Fragment2 fragment2 = new Fragment2();
Fragment3 fragment3 = new Fragment3();
//tab setting
getSupportFragmentManager().beginTransaction()
.add(R.id.container, fragment1, "fragment1").show(fragment1)
.add(R.id.container, fragment2, "fragment2").hide(fragment2)
.add(R.id.container, fragment3, "fragment3").hide(fragment3).commit();
//탭 변경 및 fragment데이터 갱신이 필요할 시
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
List<Fragment> fragments = fragmentManager.getFragments();
for (Fragment item : fragments) {
if (item.getTag().equals("선택된 탭이름")) {
beginTransaction.show(item);
/*탭의 데이터 갱신*/
if (item instanceof OnDataUpdate)
((OnDataUpdate) item).onUpdateData();
} else {
//나머지탭 숨김
beginTransaction.hide(item);
}
}
beginTransaction.commit();
기존에는 fragment를 추가하고 계속 변경하면서 생겨난 오류를
탭에 들어가야 될 fragment를 다 추가한 뒤 필요한 fragment를 show해주고 나머지는 hide를 시켜
탭 선택에 따른 fragment화면을 보여주도록 수정하였다.
728x90