태그 보관물: preferences

preferences

xml을 사용하여 문자열 배열 리소스에서 문자열 참조 설정이 있습니다. 17

메뉴에 표시 할 항목을 활성화 / 비활성화 할 수있는 환경 설정이 있습니다. 17 건의 상품이 있습니다. 값 /arrays.xml에이 17 개 항목 각각에 제목이있는 문자열 배열을 만들었습니다.

환경 설정 파일의 레이아웃이있는 preferences.xml이 있으며 제목으로 사용할 문자열 배열에서 단일 항목을 참조하고 싶습니다.

어떻게해야합니까?

Android 개발자 참조에서 XML로 단일 문자열을 참조하는 방법을 알지만 XML의 배열 리소스에서 문자열을 참조하는 방법은 알 수 없습니다.



답변

한마디로 : 나는 당신이 할 수 있다고 생각하지 않지만 해결 방법이있는 것 같습니다 : .

Android 리소스를 살펴 보려면 여기를 클릭하십시오.

http://developer.android.com/guide/topics/resources/string-resource.html

배열 섹션 (최소한 문자열 배열)보다 “자원 참조”(XML에서 얻을 수 있음)가 개별 항목을 처리하는 방법을 지정하지 않습니다. XML에서 “@ array / yourarrayhere”를 사용하도록 시도 할 수도 있습니다. 나는 디자인 타임에 첫 번째 항목을 얻을 것이라는 것을 알고 있습니다. 그러나 당신이 사용하기를 원한다면 그것은 실용적이지 않습니다.

그러나 할 수있는 트릭이 있습니다. 여기를 보아라:

XML 배열에서 XML 문자열 참조 (Android)

배열 정의 내부에 독립 문자열을 지정하여 배열 정의를 “속임수”(실제 아님) 할 수 있습니다. 예를 들어, strings.xml에서

<string name="earth">Earth</string>
<string name="moon">Moon</string>

<string-array name="system">
    <item>@string/earth</item>
    <item>@string/moon</item>
</string-array>

이를 사용하면 “android : text”및 “android : title”XML 필드에서 일반적으로 “@ string / earth”및 “@ string / moon”을 사용할 수 있지만 배열을 사용할 수있는 기능을 잃지 않습니다. 처음부터 의도 한 모든 목적에 대한 정의.

내 Eclipse에서 작동하는 것 같습니다. 왜 작동하는지 알려주시겠습니까? 🙂


답변

아마도 이것이 도움이 될 것입니다.

String[] some_array = getResources().getStringArray(R.array.your_string_array)

따라서 배열 목록을 String []으로 가져온 다음 i, some_array [i]를 선택하십시오.


답변

더 나은 옵션은 반환 된 리소스 배열을 배열로 사용하는 것입니다.

getResources().getStringArray(R.array.your_array)[position]

이것은 위에서 언급 한 접근 방식의 바로 가기 접근 방식이지만 원하는 방식으로 작동합니다. 그렇지 않으면 안드로이드는 XML 기반 배열에 대한 직접적인 XML 인덱싱을 제공하지 않습니다.


답변

운수 나쁘게:

  • XML을 사용하여 values ​​/ arrays.xml의 배열에서 단일 항목을 참조 할 수없는 것 같습니다. 물론 Java에서는 가능하지만 XML에서는 불가능합니다. Android 개발자 참조에는 그렇게하는 데 대한 정보가 없으며 다른 곳을 찾을 수 없습니다.

  • 환경 설정 레이아웃에서 배열을 키로 사용할 수없는 것 같습니다. 각 키는 고유 한 키 이름을 가진 단일 값이어야합니다.

내가 달성하고자하는 것 : 17 가지 기본 설정을 반복하고 항목이 확인되었는지 확인하고 해당 항목이 있으면 해당 기본 설정 이름의 문자열 배열에서 문자열을로드하고 싶습니다.

이 작업을 완료하기를 바랐던 코드는 다음과 같습니다.

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
ArrayAdapter<String> itemsArrayList = new ArrayAdapter<String>(getBaseContext(),   android.R.layout.simple_list_item_1);
String[] itemNames = getResources().getStringArray(R.array.itemNames_array);


for (int i = 0; i < 16; i++) {
    if (prefs.getBoolean("itemKey[i]", true)) {
        itemsArrayList.add(itemNames[i]);
    }
} 

제가 한:

  • 각 항목마다 단일 문자열을 설정하고의 단일 문자열을 참조했습니다. 기본 설정 레이아웃 확인란 제목에 단일 문자열 참조를 사용하고 루프에 대한 배열을 사용합니다.

  • 환경 설정을 반복하기 위해 방금 key1, key2, key3 등과 같은 키 이름을 지정했습니다. 문자열이있는 키를 참조하므로 런타임시 키 이름을 “빌드”하는 옵션이 있습니다.

새로운 코드는 다음과 같습니다.

for (int i = 0; i < 16; i++) {
        if (prefs.getBoolean("itemKey" + String.valueOf(i), true)) {
        itemsArrayList.add(itemNames[i]);
    }
}

답변

이를 수행하는 또 다른 방법은 아래와 같이 strings.xml에 resources 배열을 정의하는 것입니다.

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE resources [
    <!ENTITY supportDefaultSelection "Choose your issue">
    <!ENTITY issueOption1 "Support">
    <!ENTITY issueOption2 "Feedback">
    <!ENTITY issueOption3 "Help">
    ]>

그런 다음 위의 리소스를 사용하여 문자열 배열을 정의하십시오.

<string-array name="support_issues_array">
        <item>&supportDefaultSelection;</item>
        <item>&issueOption1;</item>
        <item>&issueOption2;</item>
        <item>&issueOption3;</item>
    </string-array>

DRY는 그대로 유지하면서 동일한 문자열을 다른 XML로 참조 할 수 있습니다. 내가 보는 이점은 단일 값 변경으로 코드의 모든 참조에 영향을 미친다는 것입니다.


답변