Android 에서 Preference 상세 정보 삭제
성명 파일
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:key="root">
<PreferenceCategory
android:key="theme"
android:title="Theme"
android:summary="Theme Settings"
>
<CheckBoxPreference
android:key="holo_theme"
android:title="Holo Theme"
android:summary="Use Holo Theme"
/>
</PreferenceCategory>
<CheckBoxPreference
android:key="rmcache"
android:title="Auto Clear Cache"
android:summary="Enable Auto Clear Cache "
/>
</PreferenceScreen>
등급 관계기본 설정 삭제
key 를 rmcache 의 Preference 로 삭제 합 니 다.이 Preference 는 Preference Screen root 의 하위 노드 입 니 다.
PreferenceScreen screen = getPreferenceScreen();
CheckBoxPreference autoClearCheckboxPref = (CheckBoxPreference) screen.findPreference("rmcache");
screen.removePreference(autoClearCheckboxPref);
key 를 holo 로 삭제theme 의 Preference 는 Preference Screen root 의 손자 노드 로 직접적인 관계 가 아 닙 니 다.
PreferenceCategory themePrefCategory = (PreferenceCategory) screen.findPreference("theme");
CheckBoxPreference holoCheckboxPref = (CheckBoxPreference)themePrefCategory.findPreference("holo_theme");
themePrefCategory.removePreference(holoCheckboxPref);
왜 삭제 에 실 패 했 습 니까?많은 사람들 이 삭제 에 실패 한 문제 가 발생 했다.주요 원인 은 아버지 가 아 닌 노드 를 사용 하여 삭 제 했 기 때문이다.예 를 들 어 이런 것 이다.
PreferenceScreen screen = getPreferenceScreen();
CheckBoxPreference holoCheckboxPref = (CheckBoxPreference)screen.findPreference("holo_theme");
screen.removePreference(holoCheckboxPref);
Preference Group 삭제 가 실 현 됩 니 다.사실 Preference Screen 과 Preference Category 는 모두 Preference Group 의 하위 클래스 입 니 다.
/**
* Removes a {@link Preference} from this group.
*
* @param preference The preference to remove.
* @return Whether the preference was found and removed.
*/
public boolean removePreference(Preference preference) {
final boolean returnValue = removePreferenceInt(preference);
notifyHierarchyChanged();
return returnValue;
}
private boolean removePreferenceInt(Preference preference) {
synchronized(this) {
preference.onPrepareForRemoval();
return mPreferenceList.remove(preference);
}
}
mPreference List 에 저 장 된 것 은 현재 Preference Group 의 직접 하위 Preference 입 니 다.findPreference 구현
findPreference 찾기 는 직접 하위 Preference 에 만 국한 되 는 것 이 아니 라 모든 하위 Preference 를 옮 겨 다 닙 니 다.
따라서 코드 에 도 root Preference Group 과 직접 부모 Preference Group 이 인용 되 어 있 을 때 보통 후자 의 효율 이 높다.
/**
* Finds a {@link Preference} based on its key. If two {@link Preference}
* share the same key (not recommended), the first to appear will be
* returned (to retrieve the other preference with the same key, call this
* method on the first preference). If this preference has the key, it will
* not be returned.
* <p>
* This will recursively search for the preference into children that are
* also {@link PreferenceGroup PreferenceGroups}.
*
* @param key The key of the preference to retrieve.
* @return The {@link Preference} with the key, or null.
*/
public Preference findPreference(CharSequence key) {
if (TextUtils.equals(getKey(), key)) {
return this;
}
final int preferenceCount = getPreferenceCount();
for (int i = 0; i < preferenceCount; i++) {
final Preference preference = getPreference(i);
final String curKey = preference.getKey();
if (curKey != null && curKey.equals(key)) {
return preference;
}
if (preference instanceof PreferenceGroup) {
final Preference returnedPreference = ((PreferenceGroup)preference)
.findPreference(key);
if (returnedPreference != null) {
return returnedPreference;
}
}
}
return null;
}
findPreference 와 removePreference 의 비교왜 findPreference 는 모든 하위 노드 를 옮 겨 다 니 지만 removePreference 는 그렇지 않 고 직접 하위 Preference 만 삭제 합 니까?
원인 은 다음 과 같은 몇 가지 가 있다.
1.findPreference 는 검색 을 지원 합 니 다.많은 중간 Preference Group 코드 를 줄 였 습 니 다.findPreference 는 일반적인 인터페이스 방법 에 속 합 니 다.
2.removePreference 호출 이 적 습 니 다.
3.key 와 같은 Preference 가 존재 할 때 removePreference 가 직접 하위 Preference 를 제한 하지 않 으 면 어느 것 을 정확하게 삭제 할 수 없습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.