본문 바로가기
Programing/android

[android] tab과 fragment 사용

by Benedictus711 2022. 4. 3.
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

댓글