프래그먼트를 동적으로 사용
프래그먼트의 첫 번째 문제
프래그먼트에서 버튼 또는 onClick
클래스의 하위 클래스에 Button
속성을 추가하면 예상대로 작동하지 않습니다.
프래그먼트에 onClick
속성을 추가하면 Android는 프래그먼트의 상위 액티비티에서 콜백 메서드를 찾고 메서드가 없으면 앱이 충돌합니다(메소드가 Fragment 클래스에 있더라도).
해결책???
프래그먼트의 메서드를 상위 활동으로 이동하여 이 문제를 해결할 수 있습니다. 이 솔루션은 작동하지만 다른 활동에서 프래그먼트를 재사용하려는 경우 해당 활동에서 동일한 메소드를 선언해야 한다는 부작용이 있습니다.
프래그먼트가 독립적이기를 원하므로 권장되지 않습니다. 모든 프로그래밍 문제와 마찬가지로 어딘가에 해결책이 있습니다. 당신은 그것을 찾아야합니다.
실제 솔루션
프래그먼트에서 onClick 핸들러 메소드를 정의하려면 다음 단계를 수행하십시오.
프래그먼트에서 onClick 핸들러 메소드를 정의하려면 다음 단계를 수행하십시오.
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 메소드의 액세스 수정자가 어떻게 보호되는지 확인하십시오.
다음 문서: 중첩된 조각 표시
Reference
이 문제에 관하여(프래그먼트를 동적으로 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/petemode/using-fragments-dynamically-3df9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
트윅은 동적으로 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 메소드의 액세스 수정자가 어떻게 보호되는지 확인하십시오.
다음 문서: 중첩된 조각 표시
Reference
이 문제에 관하여(프래그먼트를 동적으로 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/petemode/using-fragments-dynamically-3df9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)