Chocolate Chip Cookie
본문 바로가기
App/Android

안드로이드 프래그먼트 다루기 Fragment

by Khookie 2021. 9. 21.

 

 

메인 액티비티에 서 프래그먼트 객체 가져오기

getSupportFragmentManager() 함수를 사용
 findFragmentById() 로 객체를 가져옵니다

 

 

프래그먼트 간 이동

  NavHostFragment.findNavController(FirstFragment.this)
                        .navigate(R.id.action_FirstFragment_to_SecondFragment);

데이터를 보내는 경우 아래 

   Bundle bundle = new Bundle(); //인텐트 역 번들
                bundle.putInt("type",v.getId());
                bundle.putString("name",sName);

                NavHostFragment.findNavController(FirstFragment.this)
                        .navigate(R.id.action_FirstFragment_to_SecondFragment, bundle);
                //번들도 매개변수로 넣어줌

이전으로 이동하며 스택제거

  public void onClick(View v) {
                    //기능 : 취소버튼을 누르면 1번 프래그먼트로 이동
                     NavController navCon = NavHostFragment.findNavController(SecondFragment.this);
                     navCon.popBackStack();
                     //백버튼과 같은 효과 (백스택을 꺼내고 지금 세컨드는 제거)
                }

 

이동하며 스택 제거

 public void onClick(View v) {
                //기능:클릭시 이전화면으로 넘어가도록
                NavHostFragment.findNavController(ThirdFragment.this).popBackStack(R.id.FirstFragment,false);
                //false 의미는 돌아가는 펄스트 프래그먼트도 백스텍에서 제거하느냐(아니라 false)
            }

백버튼으로 이동하는 프래그먼트 도 스택을 지워줘야 함 

        //백버튼 수정: 액티비티를 통해 백버튼 이벤트 처리기를 가로채야함
        //애드컬백은 등록
           // true는 백버튼 처리가 처음부터 유효한지 중간 세팅부터 유효한지 여부
        requireActivity().getOnBackPressedDispatcher().addCallback(new OnBackPressedCallback(true) {
            @Override
            public void handleOnBackPressed() {
             NavHostFragment.findNavController(ThirdFragment.this).popBackStack(R.id.FirstFragment,false);
             }
             
            });

 

 

 

 

네비게이션

아래 속성들을 통해 이동하는 액션의 백스텍 설정, 애니메이션 설정,목적지 설정 등이 가능하다 
  <action
            android:id="@+id/action_matzipMakerFragment_to_mapsFragment"
            app:destination="@id/mapsFragment"
            app:popUpTo="@drawable/whatis_welcome"
            app:popUpToInclusive=""
            app:popEnterAnim=""
            app:popExitAnim=""
            app:enterAnim=""
            app:exitAnim=""/>​

1) popUpToInclusive : true
     - popUpTo으로 설정한 fragment까지 백스택에서 제거를 하고, popUpTo으로 설정한 fragment의 이전 fragment로 이동을한다.


  2) popUpToInclusive : false
     - popUpTo으로 설정한 fragment 이전까지만 백스택에서 제거를 하고, popUpTo으로 설정한 fragment로 이동한다.

 



출처: https://thinkerodeng.tistory.com/290 [Thinker]

 

 

 

프래그먼트 내에서 인텐트 이동하기

//getApplicationContext()는 프래그먼트에선 getActivity()
                  Intent intentSNS = new Intent(getActivity(),snsActivity.class);
                  //intentSNS.putExtra("이름","데이터값"); //보낼 데이터가 있는경우 사용
                  startActivity(intentSNS);​

 

추가 로 볼 글:

안드로이드 스튜디오 :: 프래그먼트에서 프래그.. : 네이버블로그 (naver.com)

댓글