답변:
한마디로 : 나는 당신이 할 수 있다고 생각하지 않지만 해결 방법이있는 것 같습니다 : .
Android 리소스를 살펴 보려면 여기를 클릭하십시오.
http://developer.android.com/guide/topics/resources/string-resource.html
배열 섹션 (최소한 문자열 배열)보다 "자원 참조"(XML에서 얻을 수 있음)가 개별 항목을 처리하는 방법을 지정하지 않습니다. XML에서 "@ array / yourarrayhere"를 사용하도록 시도 할 수도 있습니다. 나는 디자인 타임에 첫 번째 항목을 얻을 것이라는 것을 알고 있습니다. 그러나 당신이 사용하기를 원한다면 그것은 실용적이지 않습니다.
그러나 할 수있는 트릭이 있습니다. 여기를 보아라:
배열 정의 내부에 독립 문자열을 지정하여 배열 정의를 "속임수"(실제 아님) 할 수 있습니다. 예를 들어, 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에서 작동하는 것 같습니다. 왜 작동하는지 알려주시겠습니까? :-)
strings.xml
했지만 넣지 않았으며 values-fr
배열은 여전히 프랑스어 버전으로 업데이트되었습니다. 너무 잘못 ..하지만 멋진 작동합니다!
아마도 이것이 도움이 될 것입니다.
String[] some_array = getResources().getStringArray(R.array.your_string_array)
따라서 배열 목록을 String []으로 가져온 다음 i, some_array [i]를 선택하십시오.
String myPref = preferences.getString(context.getResources().getString(R.string.my_pref), some_array [0]);
my_pref가 이전에 어떤 값 some_array로 설정 [을 X]
더 나은 옵션은 반환 된 리소스 배열을 배열로 사용하는 것입니다.
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로 참조 할 수 있습니다. 내가 보는 이점은 단일 값 변경으로 코드의 모든 참조에 영향을 미친다는 것입니다.
name
<item> s ... * sigh * 에만 태그를 줄 수 있다면