xml을 사용하여 문자열 배열 리소스의 문자열 참조
메뉴에 표시할 항목을 활성화/비활성화할 수 있는 환경설정이 있습니다.17개의 아이템이 있습니다.values/arrays.xml의 문자열 배열을 이 17개 항목의 제목으로 만들었습니다.
기본 설정 파일의 레이아웃이 있는 preferences.xml이 있는데 문자열 배열에서 제목으로 사용할 단일 항목을 참조하고 싶습니다.
어떻게 해야 하나요?
Android 개발자 참조에서는 XML을 사용하여 단일 문자열을 참조하는 방법은 볼 수 있지만 XML의 배열 리소스에서 문자열을 참조하는 방법은 볼 수 없습니다.
간단히 말해서, 저는 당신이 할 수 있다고 생각하지 않지만, 해결책이 있는 것 같습니다.
여기서 Android 리소스를 살펴보면 다음과 같습니다.
http://developer.android.com/guide/topics/resources/string-resource.html
배열 섹션(최소한 문자열 배열) 아래에서 볼 수 있듯이 "RESOURCE REFERENCE"(XML에서 가져올 수 있음)는 개별 항목을 주소 지정하는 방법을 지정하지 않습니다.XML에서 "@array/yourarray here"를 사용해 볼 수도 있습니다.저는 디자인 타임에 당신이 첫 번째 아이템을 얻을 것이라는 것을 알고 있습니다.하지만 당신이 사용하고 싶다면, 그것은 실용적이지 않습니다, 예를 들어...물론 두 번째.
하지만, 여러분이 할 수 있는 속임수가 있습니다.다음을 참조:
배열 정의 내부의 독립 문자열을 지정하여 배열 정의를 "속일" 수 있습니다(실제는 아님).예를 들어 string.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"을 정상적으로 사용할 수 있지만, 처음에 의도한 목적과 상관없이 어레이 정의를 사용할 수 있습니다.
여기 내 이클립스에서 작동하는 것 같습니다.효과가 있는지 저희에게 말씀해 주시겠어요? :-)
이것이 도움이 될 수도 있습니다.
String[] some_array = getResources().getStringArray(R.array.your_string_array)
따라서 배열 목록을 String[]으로 가져온 다음 임의의 i, some_array[i]를 선택합니다.
더 나은 옵션은 리소스 반환 어레이를 어레이로 사용하는 것입니다. 즉, 다음과 같은 의미가 있습니다.
getResources().getStringArray(R.array.your_array)[position]
이는 언급된 다른 접근 방식의 지름길이지만 원하는 방식으로 작업을 수행합니다.그렇지 않으면 Android는 XML 기반 배열에 대한 직접 XML 인덱싱을 제공하지 않습니다.
유감스럽게도:
values/arrays.xml의 배열에서 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에 리소스 배열을 정의하는 것입니다.
<?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>
동일한 문자열을 다른 xml에 참조하여 DRY를 그대로 유지할 수 있습니다.제가 볼 수 있는 장점은, 한 번의 값 변경으로 코드의 모든 참조에 영향을 미친다는 것입니다.
그 대답은 실행하기에 꽤 쉽습니다.
String[] arrayName = getResources().getStringArray(R.array.your_string_array);
이제 인덱스로 어레이의 모든 요소에 액세스할 수 있습니다(예: i'th 인덱스로). 그런 다음 arrayName[i]로 액세스할 수 있습니다.
이것을 이해해 주시기 바랍니다.
언급URL : https://stackoverflow.com/questions/4161256/referencing-a-string-in-a-string-array-resource-with-xml
'programing' 카테고리의 다른 글
디렉토리의 모든 파일에 대해 명령 실행 (0) | 2023.05.11 |
---|---|
지정된 속성을 가진 속성 목록을 가져오는 방법은 무엇입니까? (0) | 2023.05.11 |
VB의 메서드 본문 내에서는 코드 영역을 사용할 수 없습니다.NET? (0) | 2023.05.11 |
csv.오류: 반복기는 바이트가 아닌 문자열을 반환해야 합니다. (0) | 2023.05.11 |
ASP에서 페이지를 새로 고치려면 어떻게 해야 합니까?NET? (코드로 다시 로드할 수 있음) (0) | 2023.05.11 |