[Android] 탭바 만들기 - Fragment

원준·2023년 7월 27일

Android Studio

목록 보기
37/40

Fragment ?

  • 액티비티처럼 이용할 수 있는 View
  • 큰 화면의 태블릿 처럼 화면이 넓어진 UI를 커버하기 위해 만들어진 View
  • 특징

    • 독립적일 수 없다. (Activity 혹은 부모 Fragment에 종속적이다.)
    • 자체 생명주기를 가진다.
    • 재사용이 가능하다.
    • Activity 내에서 실행 중 추가, 삭제, 교체 등이 가능하다.

탭바를 만들자!

  • 자세한 설명은 다음 포스터에서 다루겠다.
  • 탭바를 이용해 Fragment를 사용해보자!

0. 모듈 단위 build.gradle 라이브러리 추가

dependencies {
	implementation 'androidx.navigation:navigation-fragment:2.5.3'
    implementation 'androidx.navigation:navigation-ui:2.5.3'
}

1. res/ 안에 폴더 및 파일 만들기

  • 안드로이드 전용 폴더를 만들고 파일을 만들자.

2. Fragment 만들기

  • 하나의 묶음을 만드는게 navigation이라면, 묶은 여러개의 View들을 Fragment라고 한다!

  • Fragment를 자신이 원하는 이름으로 만들자.

3. 탭바를 이용할 menu를 만들자!

  • 이미지를 같이 설정해 주는게 편하다.

4. 사용할 부모 Activity에 추가/연결 하자!

  • 우선 사용할 탭바를 만들자.

  • 만든 BottomNavigationView에서 menu 옵션을 통해 연결하자!

5. 탭바와 Fragment 연결하기!

  • 만든 탭바에 따라 다른 Fragment를 보여주기 위해서 연결해보자!

    // 멤버 변수
    BottomNavigationView buttonNavigationView;
    //각 프레그먼트들을 멤버변수로 만든다.
    Fragment firstFragment;
    Fragment secondFragment;
    Fragment thirdFragment;
    
    @Override
    protected void onCreate(Bundle savedInstanceState){
    		// ...
          buttonNavigationView = findViewById(R.id.buttonNavigationView);
    
          firstFragment = new FristFragment();
          secondFragment = new SecondFragment();
          thirdFragment = new ThirdFragment();
          
         //탭바를 클릭 했을때,
         buttonNavigationView.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {
              @Override
              public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                  int itemId = item.getItemId();
                  Fragment fragment = null;
    				// 각각의 탭바에 따라 fragment를 설정해서 값을 변경
                  if(itemId == R.id.firstFragment){
                      fragment = firstFragment;
                  }else if(itemId == R.id.secondFragment){
                      fragment = secondFragment;
                  }else if(itemId == R.id.thirdFragment){
                      fragment = thirdFragment;
                  }
    
                  return loadFragment(fragment);
              }
          });
    }
    
    // 누른 fragment에 따라 화면을 보여주는 함수
    // commit을 통해야 보여준다.
    boolean loadFragment(Fragment fragment){
      if(fragment != null){
          getSupportFragmentManager()
                  .beginTransaction()
                  .replace(R.id.fragment, fragment)
                  .commit();
    
          return true;
      }else {
          return false;
      }
    }
    
profile
공부해보자

1개의 댓글

comment-user-thumbnail
2023년 7월 27일

이런 유용한 정보를 나눠주셔서 감사합니다.

답글 달기