컴퓨터 지식 네트워크 - 컴퓨터 지식 - Android 기본 설정 화면은 어떤 의도를 사용하나요?

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 활동 = queryIntentActivities(queryIntent) final HashSet inflateRes = new HashSet(); for (int i =activity.size() - 1; i >= 0; i--) { final ActivityInfo ActivityInfo =activity.get(i).activityInfo ; final Bundle MetaData = ActivityInfo.metaData; if ((metaData == null) !metaData.containsKey(METADATA_KEY_PREFERENCES)) { continue } // 패키지를 res ID와 연결해야 합니다.

이후 동일한 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 활동 = queryIntentActivities(queryIntent) final HashSet inflateRes = new H

ashSet(); for (int i =activity.size() - 1; i >= 0; i--) { final ActivityInfo =activity.get(i).activityInfo 최종 번들 MetaData = ActivityInfo.metaData; ; if ((metaData == null) !metaData.containsKey(METADATA_KEY_PREFERENCES)) { continue; } // 동일한 res ID는 컨텍스트 전체에서 재사용될 수 있으므로 패키지를 res ID와 연결해야 합니다. final String UniqueResId = ActivityInfo .packageName + ":" + ActivityInfo.metaData.getInt(METADATA_KEY_PREFERENCES); if (!inflatedRes.contains(uniqueResId)) { inflatedRes.add(uniqueResId); final Context context; 0); } catch (NameNotFoundException e) { Log.w(TAG, "" + ActivityInfo.packageName + "에 대한 컨텍스트를 생성할 수 없습니다: " + Log.getStackTraceString(e)) continue; 문맥, 이) 최종

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"; 프로젝트의 경우 다음과 같이 내부 활동 태그에   이 xml은 프로그램에서 복사되어 새로운 프로젝트.

우리는 원래 프로젝트에서 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이 정상적으로 표시됩니다.  문제가 해결되었습니다.  

上篇: c6는 어떤 모델인가요? 下篇: 닥터 다이아몬드 반지 가격은 얼마인가요?
관련 내용