code

onAttach ()가 Fragment에서 호출되지 않았습니다.

codestyles 2020. 11. 26. 08:18
반응형

onAttach ()가 Fragment에서 호출되지 않았습니다.


내 조각은 onAttach(context)에서 시작될 때 메서드를 호출하지 않습니다 AppCompatActivity.

XML로 조각 만들기 :

<fragment
    android:id="@+id/toolbar"
    class="package.MainToolbarFragment"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:layout="@layout/fragment_main_toolbar" />

하지만이에서를 확장하는 경우 support.v4.Fragment, onAttach(context)전화!

무엇이 문제일까요?

물론 모든 조각을에서 확장 할 수 v4.Fragment있지만 원하지는 않습니다. 나쁜 습관입니까? 또한 프로젝트 min sdk 14.


이 메소드가 API 23에 추가 되었기 때문에 호출되지 않습니다. API 23 (marshmallow)이있는 기기에서 애플리케이션을 실행하면 onAttach(Context)호출됩니다. 모든 이전 Android 버전에서 onAttach(Activity)호출됩니다.

http://developer.android.com/reference/android/app/Fragment.html#onAttach(android.app.Activity)

지원 라이브러리 조각은 플랫폼에 독립적입니다. 따라서 모든 API 버전에서 작동합니다.


Google은 더 이상 사용되지 않는 API 사용을 중단하기를 원하지만

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    ...

너무 새롭기 때문에 널리 불려지지 않습니다. 또한 구현해야합니다.

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    ...

나를 위해 그들은 동일하지만 KISS를 좋아하고 다른 지원 라이브러리를 도입하면 APK가 약 1000kb로 두 배가되는 경향이 있습니다. 어제 SDK 만 업데이트했습니다.

많은 경우와 같이 여기서 유형을 상호 교환 할 수없는 이유는 공개적으로 볼 수 있고 (하위 클래스로) 더 전문화 되어 있기 때문에 Activityan Activity가 제공 될 때를 취하는 메서드 가 계속 호출 되기 때문입니다. 우선권을 가지다.ActivityContext


앞서 언급 한 설명 외에도을 사용 onAttach()하여 부모 활동에서 조각 내부에 포함 된 데이터를 업데이트 하려는 경우 활동 내부의 컬렉션 변수가 null 일 때 문제가 발생할 수 있다는 점에 유의하는 것이 중요하다고 생각합니다. 또는 조각이 부 풀릴 때 비어 있습니다. 활동의 수명주기 내 어느 시점에서 데이터 모델이 변경 될 수 있으며 조각 내에서 업데이트해야합니다. 이미 부풀린 조각에 대한 참조를 얻으려고 시도 할 수 있지만 onAttach()Context 또는 Activity 개체를 포함하는 재정의를 사용하는 경우에도 실행되지 않는 코드를 단계별로 살펴보면 찾을 수 있습니다 .

프래그먼트에 대한 리스너를 만들고 onAttach()콜백 메서드 에서 리스너를 초기화하려는 onAttach()경우, 액티비티에 프래그먼트를 추가 할 때 아래와 같이 태그 매개 변수를 제공하지 않으면는 실행되지 않습니다.

// in the Activity
getFragmentManager().beginTransaction()
    .add(
        R.id.fragmentContainer,
        CustomFragment.newInstance(customDataSource),
        CustomFragment.TAG // Must be passed in for the code below to work
    ).commit();


// Getting a reference to the fragment later on (say to update your data model inside the fragment (in onActivityResult())

CustomFragment fragmentDelegate = (CustomFragment) getFragmentManager().findFragmentByTag(CustomFragment.TAG);
fragmentListener.updateDataSource(customDataSource);

참고 URL : https://stackoverflow.com/questions/32604552/onattach-not-called-in-fragment

반응형