프래그먼트를 동적으로 사용

액티비티와 프래그먼트의 수명 주기 메서드 간의 한 가지 차이점은 액세스 한정자에 있습니다. Fragment 수명 주기 메서드가 공개되는 동안 활동 수명 주기 메서드는 보호됩니다.

프래그먼트의 첫 번째 문제



프래그먼트에서 버튼 또는 onClick 클래스의 하위 클래스에 Button 속성을 추가하면 예상대로 작동하지 않습니다.
프래그먼트에 onClick 속성을 추가하면 Android는 프래그먼트의 상위 액티비티에서 콜백 메서드를 찾고 메서드가 없으면 앱이 충돌합니다(메소드가 Fragment 클래스에 있더라도).

해결책???

프래그먼트의 메서드를 상위 활동으로 이동하여 이 문제를 해결할 수 있습니다. 이 솔루션은 작동하지만 다른 활동에서 프래그먼트를 재사용하려는 경우 해당 활동에서 동일한 메소드를 선언해야 한다는 부작용이 있습니다.

프래그먼트가 독립적이기를 원하므로 권장되지 않습니다. 모든 프로그래밍 문제와 마찬가지로 어딘가에 해결책이 있습니다. 당신은 그것을 찾아야합니다.

실제 솔루션



프래그먼트에서 onClick 핸들러 메소드를 정의하려면 다음 단계를 수행하십시오.
  • Fragment 클래스가 View.OnClickListener 인터페이스를 구현하도록 합니다.
  • 프래그먼트의onClick 메서드를 재정의하고 if-else 또는 스위치를 사용하여 클릭한 보기의 ID에 따라 다른 콜백을 제공합니다.
    3 처리하려는 모든 버튼에 대해 button.setOnClickListener(this) 를 사용하여 onClick 수신기를 연결합니다.

  • 프래그먼트의 두 번째 문제



    동적 조각의 상태는 <fragment/> 태그가 있는 활동의 레이아웃에 중첩된 경우 구성 변경에서 유지되지 않습니다. 그러나 FragmentTransaction 및 약간의 조정을 통해 활동에 추가되면 살아남습니다.

    작은 조정



    트윅은 동적으로 FrameLayout에 프래그먼트를 추가하고 다시 생성되는 프래그먼트를 오버레이하지 않도록 활동이 처음부터 생성되는 경우에만 이를 수행합니다.

    이것은 매우 간단합니다. onCreate라는 이름의 Bundle가 null인지 확인하는 활동의 savedInstanceState 메서드에 코드를 추가합니다.
    번들이 null이면 활동이 처음부터 생성되고 있음을 의미합니다. null이 아닌 경우 활동이 다시 생성되고 있음을 의미합니다.

    아래 코드 스니펫을 보십시오.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      ...
      if (savedInstanceState == null) {
        DemoFragment frag = new DemFragment();
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.add(R.id.fragment_container, frag);
        transaction.addToBackStack(null);
        transaction.commit();
      }
    }
    


    코드 분류

    이 코드 스니펫은 활동이 처음부터 생성되는 경우에만 활동에 프래그먼트를 추가하는 데 사용됩니다.
    DemoFragment는 코드 어딘가에 생성했어야 하는 조각 클래스의 이름입니다.

    frag는 활동에 추가하려는 인스턴스Fragment의 이름입니다.

    fragment_container는 조각을 배치하려는 FrameLayout의 ID입니다.
    savedInstanceState가 null인 경우 활동이 처음부터 생성되고 있고 하위 프래그먼트가 아직 렌더링되지 않았으며 하위 프래그먼트를 추가하기 위한 로직을 계속 추가한다는 의미입니다.

    onCreate 메소드의 액세스 수정자가 어떻게 보호되는지 확인하십시오.

    다음 문서: 중첩된 조각 표시

    좋은 웹페이지 즐겨찾기