Android 기본 설정 화면은 어떤 의도를 사용하나요?
addPreferencesFromResource(R.xml.setting_preference); 최근 프로젝트 때문에 프로그램의 모든 리소스 파일을 다른 apk에 넣어야 합니다. 위의 방법에서는 로컬 또는 시스템 리소스 ID만 전달할 수 있습니다. 그런 다음 비슷한 메서드를 찾았습니다. addPreferencesFromIntent(Intentintent); Baidu Google은 이 메서드의 예가 없다는 것을 발견했습니다. Google에서 API만 검색했습니다. public void addPreferencesFromIntent(Intentintent) 이후: API 레벨 1 이 메서드는 더 이상 사용되지 않습니다. 이 함수는 최신 조각 기반 PreferenceActivity와 관련이 없습니다. 매개변수 의도 쿼리 활동에 대한 인텐트 이 소개는 매우 간단합니다. xml이 무엇인지에 대한 설명이 없습니다. 인텐트를 어떻게 파싱하는지 소스 코드를 살펴보고 사용 가능한 인텐트를 제공하는 수밖에 없습니다.
PreferenceFragment를 상속하기 때문에 소스 코드에서 Frameworks/base/core/java/android/preference/PreferenceFragment.java 클래스를 찾았습니다. view plaincopy toclipboardprint? public void addPreferencesFromIntent(의도 의도) { requirePreferenceManager(); setPreferenceScreen(mPreferenceManager.inflateFromIntent(intent, getPreferenceScreen())) } public void addPreferencesFromIntent(의도 의도) { requirePreferenceManager(); setPreferenceScreen(mPreferenceManager.inflateFromIntent(intent, getPreferenceScreen())) } 그런 다음 여기에서 mPreferenceManager.inflateFromIntentt(intent, getPreferenceScreen())를 다시 사용하고 이 클래스를 찾습니다.frameworks/base/core/java/android / reference/PreferenceManager.java: 클립보드 인쇄로 일반 복사 보기 PreferenceScreen inflateFromIntent(Intent queryIntent, PreferenceScreen rootPreferences) { final List
이후 동일한 res ID는 // 컨텍스트 전체에서 재사용될 수 있습니다. final String UniqueResId = ActivityInfo.packageName + ":" + ActivityInfo.metaData.getInt(METADATA_KEY_PREFERENCES); if (!inflateRes.contains(uniqueResId)) { inflateRes.add( UniqueResId); 최종 컨텍스트 컨텍스트; try { context = mContext.createPackageContext(activityInfo.packageName, 0) } catch (NameNotFoundException e) { Log.w(TAG, "" + ActivityInfo.packageName + "에 대한 컨텍스트를 생성할 수 없습니다. + Log.getStackTraceString(e)); 계속; } final PreferenceInflater(context, this); final XmlResourceParser Parser = ActivityInfo.loadXmlMetaData(context .getPackageManager(), METADATA_KEY_PREFERENCES); 파서, rootPreferences, true); 파서.close(); } rootPreferences.onAttachedToHierarchy(this); return rootPreferences; } PreferenceScreen inflateFromIntent(Intent queryIntent, PreferenceScreen rootPreferences ) { final List
ashSet
se(); } } rootPreferences.onAttachedToHierarchy(this); return rootPreferences; }위 코드를 통해 우리는 인텐트에서 일련의 활동을 가져와야 한다는 것을 알고 있습니다. ActivityInfo.metaData.getInt(METADATA_KEY_PREFERENCES)를 통해 우리는 PreferenceManager.java에서 다음 정의를 검색하고 찾으세요. view plaincopy toclipboardprint? public static final String METADATA_KEY_PREFERENCES = "android.preference"; public static final String METADATA_KEY_PREFERENCES = "android.preference"; 프로젝트의 경우 다음과 같이 내부 활동 태그에 우리는 원래 프로젝트에서 addPreferencesFromResource(R.xml.setting_preference); 문을 다음과 같이 대체했습니다. view plaincopy toclipboardprint? Intent xmlIntent = new Intent(); ComponentName 컴포넌트 = new ComponentName("com.winca.style.defaultskin","com.winca.style.defaultskin.RadioReadSettingXMLActivity"); xmlIntent.setComponent(컴포넌트 ); addPreferencesFromIntent(xmlIntent);
Intent xmlIntent = new ComponentName 컴포넌트 = new ComponentName( "com.winca.style.defaultskin","com.winca.style.defaultskin.RadioReadSettingXMLActivity"); xmlIntent.setComponent(comComponent); addPreferencesFromIntent(xmlIntent); 실행하면 xml이 정상적으로 표시됩니다. 문제가 해결되었습니다.