액티비티와 프레그먼트 정의 ?
액티비티 : 안드로이드에서 하나의 화면에 매칭되는 하나의 클래스 (액티비티가 안드로이드에서는 관리하는 최소한의 단위 )
프레그먼트 생긴 이유
그림요약 ) 하나의 화면에 테블릿이 생기면서 핸드폰의 두가지 화면을 표현할수 있어서 두개로 나눠서 관리해야함으로 프레그먼트가 생김
액티비티와 프레그먼트 라이프 사이클
엑티비티 onCreate() 호출 받아서 생성되는 동안 프레그먼트는 onAttach()->onCreate()->onCreateView()->onActivityCreated() 까지 실행됨
프레그먼트는 다른 프래그먼트로 이동시 onDestroyView() ->다시 되돌아 갈떄 oncreateView() 로 시작
onCreateView() 할때 화면이 만들어짐
다른 프레그먼트 갈때 onDestroyView() 까지 실행됨
navigation-fragment
navigation-ui
검색
xml
BottomNavigationView 추가
menu 생성 팁
Resource Manager 선택
navigation 선택 후 + 선택 후 생성
Fragment 생성
메인 엑티비티 xml
NavHostFragment 선택
네비게이션 바텀에 들어갈 메뉴 생성
메뉴 아이템 선택
아이콘 생성 Drawable Vector Asset
액티비티 메인에서 메뉴 연결(app:menu= )
메인 자바코드
첫번쨰 방법
// 아래쪽의 탭 : 누를때마다 , 위쪽화면이 바뀌어야 한다.
navigationView = findViewById(R.id.bottomNavigationView);
// 화면이 바뀌려면, 컨트롤러가 필요 . 컨트롤러 만든다.
NavController navController = Navigation.findNavController(
MainActivity.this,R.id.fragment);
// 액션바의 타이틀을, 프래그먼트에 맞게 변경하고 싶을때.
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
R.id.firstFragment,R.id.secondFragment,R.id.thirdFragment
).build();
// 네비게이션 UI 에 연결
NavigationUI.setupActionBarWithNavController(
MainActivity.this,navController,appBarConfiguration);
// 아래쪽의 탭과, 컨트롤러를 결합
NavigationUI.setupWithNavController(navigationView,navController);
프레그먼트 타이틀 변경 my_nav.xml
android:label
두번쨰 방법
// 방법 2 실무에서 많이 쓰는 코드 화면이 내용이 안바뀌는 코드
// 각각의 프레그먼트를 생성
firstFragment = new FirstFragment();
secondFragment = new SecondFragment();
thirdFragment = new ThirdFragment();
loadFragment(firstFragment);
navigationView = findViewById(R.id.bottomNavigationView);
navigationView.setOnNavigationItemSelectedListener(
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
Fragment fragment = null;
switch (menuItem.getItemId()){
case R.id.firstFragment:
fragment = firstFragment;
getSupportActionBar().setTitle("Home");
break;
case R.id.secondFragment:
fragment = secondFragment;
getSupportActionBar().setTitle("Audio");
break;
case R.id.thirdFragment:
fragment = thirdFragment;
getSupportActionBar().setTitle("Setting");
break;
}
return loadFragment(fragment);
}
});
// 2번쨰 방법은 xml fragment를 FrameLayout 으로 변경
<!--첫번째방법-->
<fragment
android:id="@+id/fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/bottomNavigationView"
app:defaultNavHost="true"
app:navGraph="@navigation/my_nav"/>
탭 4개 이상시 글자 안보일때 보이게 하는 코드
디자인
material.io 검색
components
https://material.io/develop/android/components/buttons
디펜더시 추가
R.values.styles
<!--Material사용시스타일바꿔야함-->
<stylename="AppTheme"parent="Theme.MaterialComponents.Light.DarkActionBar">
tip)
리사이클러뷰 getAdapterPosition();
디플리케이티드 됩니다
getBindingAdapterPosition();