Android Fragment on Attach()는 더 이상 사용되지 않습니다.
최신 지원 라이브러리(버전 23.0.0)를 사용하도록 앱을 업데이트했는데, Fragment 클래스의 onAttach() 기능이 더 이상 사용되지 않는다는 것을 알게 되었습니다.
다음 대신:
onAttach (Activity activity)
지금입니다.
onAttach (Context context)
내 앱이 사용 중지 전에 전달된 활동을 사용하기 때문에 가능한 해결책은 다음과 같습니다.
@Override
public void onAttach(Context context) {
super.onAttach(context);
activity = getActivity();
}
그것이 그것을 하는 올바른 방법입니까?
업데이트:
API가 23보다 낮은 장치를 실행하면 새로운 onAttach()가 호출되지도 않습니다.저는 이것이 그들이 의도했던 것이 아니길 바랍니다!
업데이트 2:
SDK에 대한 최신 업데이트로 문제가 해결되었습니다.
API 22 기기에서 테스트를 해보니 Attach(Context)가 호출되고 있습니다.
몇 주 전에 열어본 버그 보고서와 구글 직원들의 답변을 보려면 여기를 클릭하십시오.
활동은 컨텍스트이므로, 단순히 컨텍스트가 활동인지 확인하고 필요한 경우 캐스트할 수 있습니다.
@Override
public void onAttach(Context context) {
super.onAttach(context);
Activity a;
if (context instanceof Activity){
a=(Activity) context;
}
}
업데이트: 일부에서는 새 제품이Context
재정의가 호출되지 않습니다.저는 몇 가지 테스트를 해봤지만 이것이 사실인 시나리오를 찾을 수 없으며 소스 코드에 따르면 절대 사실이 되어서는 안 됩니다.모든 SDK23 이후, 이후,Activity
리고그고.Context
의버전의 onAttach
호출되었습니다.그렇지 않은 시나리오를 찾을 수 있다면 문제를 설명하는 샘플 프로젝트를 만들어 안드로이드 팀에 보고하는 것이 좋습니다.
업데이트 2: Android 지원 라이브러리 조각은 버그가 더 빨리 수정될 때만 사용합니다.재정의가 올바르게 호출되지 않는 위의 문제는 프레임워크 조각을 사용하는 경우에만 밝혀지는 것 같습니다.
이것은 구글의 또 다른 큰 변화입니다...수정 : replace 제수사: 교체onAttach(Activity activity)
와 함께onAttach(Context context)
그 이후로 이전 API에서 내 앱을 크래시했습니다.onAttach(Context context)
네이티브 fragment에서는 호출되지 않습니다.
네이티브 fragment(안드로이드.app)를 사용하고 있습니다.Fragment) 그래서 이전 API(<23)에서 다시 작동하기 위해 다음을 수행해야 했습니다.
제가 한 일은 다음과 같습니다.
@Override
public void onAttach(Context context) {
super.onAttach(context);
// Code here
}
@SuppressWarnings("deprecation")
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
// Code here
}
}
fragment를 , "fragment"라는 SDK를 합니다.OnAttach(Context context)
불리지 않을 것입니다.
대신 되어 있고, 지조사때기문사대용않수고것정되이는신지하에원각을하용▁i,.onAttach(Context context)
항상 호출됩니다.
현재 에서onAttach
프래그먼트 코드입니다. 이 코드는 다음과인지 확실하지 않습니다.Context
현재 활동입니다.소스 코드
public void onAttach(Context context) {
mCalled = true;
final Activity hostActivity = mHost == null ? null : mHost.getActivity();
if (hostActivity != null) {
mCalled = false;
onAttach(hostActivity);
}
}
다음을 보시면getActivity
동일한 통화가 표시됩니다.
/**
* Return the Activity this fragment is currently associated with.
*/
final public Activity getActivity() {
return mHost == null ? null : mHost.getActivity();
}
활동을 확인하려면 다음을 사용합니다.getActivity()
(에)onAttach
당신의Fragment
하지만 확인하는 것을 잊지 마세요.null
왜냐하면 만약에mHost
이라null
당신의 활동은.null
@Override
public void onAttach(Context context) {
super.onAttach(context);
Activity activity = context instanceof Activity ? (Activity) context : null;
}
비록 대부분의 경우에 그것은 충분히 가지고 있는 것처럼 보이지만.onAttach(Context)
호출되지 않는 일부 전화기(예: 샤오미 레드미 노트 2)가 있으므로 NullPointer가 발생합니다.예외.따라서 안전한 쪽으로 가기 위해 사용되지 않는 방법도 사용할 것을 제안합니다.
// onAttach(Activity) is necessary in some Xiaomi phones
@SuppressWarnings("deprecation")
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
_onAttach(activity);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
_onAttach(context);
}
private void _onAttach(Context context) {
// do your real stuff here
}
sdk 관리자를 사용하여 최신 지원 라이브러리를 다운로드하고 다음을 포함합니다.
compile 'com.android.support:appcompat-v7:23.1.1'
gradle.app에서 컴파일 버전을 api 23으로 설정합니다.
아래 답변은 Android 개발자 웹 사이트의 Fragments 튜토리얼에서 발생하는 이 사용 중지 경고와 관련이 있으며 위의 게시물과 관련이 없을 수 있습니다.
튜토리얼 수업에서 이 코드를 사용했는데 작동했습니다.
public void onAttach(Context context){
super.onAttach(context);
Activity activity = getActivity();
저는 문서에 명시된 대로 활동이 무효가 될 수도 있다고 걱정했습니다.
작업 가져오기
FragmentActivity getActivity () 이 조각이 현재 연결되어 있는 FragmentActivity를 반환합니다.조각이 대신 컨텍스트와 연결된 경우 null을 반환할 수 있습니다.
그러나 main_activity의 onCreate는 fragment가 로드되었음을 분명히 보여주기 때문에 이 메서드 이후에 fragment에서 get activity를 호출하면 main_activity 클래스가 반환됩니다.
getSupportFragmentManager().beginTransaction().add(R.id .firstFragment).커밋(commit) »;
내가 이것에 대해 옳기를 바랍니다.저는 완전 초보자입니다.
사용 중일 것입니다.android.support.v4.app.Fragment
대신 이를 위해onAttach
메소드, 그냥 사용getActivity()
을 얻기 위해FragmentActivity
조각이 연관된 것입니다.그렇지 않으면 당신은onAttach(Context context)
방법.
이것은 사용자가 인터페이스 'TopSectionListener'를 정의했을 때 도움이 되었습니다. 이 인터페이스의 개체 활동 명령어는 다음과 같습니다.
//This method gets called whenever we attach fragment to the activity
@Override
public void onAttach(Context context) {
super.onAttach(context);
Activity a=getActivity();
try {
if(context instanceof Activity)
this.activitycommander=(TopSectionListener)a;
}catch (ClassCastException e){
throw new ClassCastException(a.toString());}
}
언급URL : https://stackoverflow.com/questions/32083053/android-fragment-onattach-deprecated
'programing' 카테고리의 다른 글
php를 사용하여 텍스트 파일 내용 지우기 (0) | 2023.08.11 |
---|---|
Maria DB - Before Insert Trigger 값을 NEW.field에 할당합니다. (0) | 2023.08.11 |
ORA-0131 : 권한 부족 DEBUG CONNECT SESSION (0) | 2023.08.11 |
스타일 시트 경로의 슬래시(/) 대 타일 슬래시(~/) (0) | 2023.08.11 |
VBA 파일을 사용자 양식으로 끌어다 놓아 파일 이름 및 경로 가져오기 (0) | 2023.08.11 |