2012-01-04 3 views
5

strings.xml의 다른 문자열 배열에서 문자열 배열을 참조하고 싶습니다. 내 활동에서 문자열 배열 ("식물")을 읽으려고하면 모든 항목의 값이 null입니다.참조 string-arrays in android strings.xml

이 값을 얻을 수 있습니까?

<string name="Orlaya_grandiflora_1">Orlaya grandiflora</string> 
<string name="Orlaya_grandiflora_2">Large-Flowered Orlaya</string> 
<string name="Orlaya_grandiflora_3">Apiaceae</string> 
<string-array name="Orlaya_grandiflora"> 
    <item>@string/Orlaya_grandiflora_1</item> 
    <item>@string/Orlaya_grandiflora_2</item> 
    <item>@string/Orlaya_grandiflora_3</item> 
</string-array> 
<string-array name="plants"> 
    <item>@array/Ginkgo_biloba</item> 
    <item>@array/Capsicum_frutescens</item> 
    <item>@array/Viscum_album</item> 
    <item>@array/Orlaya_grandiflora</item> 
</string-array> 

내가 예를 들어, 다음과 같은 값을 액세스하려고 : 식물의

String[] plantArray = resources.getStringArray(R.array.plants); 

for (String plant : plantArray) { 
     System.out.println("--> " + plant); 
    } 

값은 모든 경우에 "널 여기

은 strings.xml의의 일부입니다 "

값을 액세스하는 방법을 아는 사람이 있습니까? Android - String Resources

enter image description here

+0

무엇이 exacly "resources"입니까? 개체 또는 다른? –

+0

이 누락되었습니다 : Resources resources = getResources(); – alex3000

답변

6

당신은 다음을 수행해야합니다 :

+0

고마워요, 이것이 내가 찾고있는 것입니다! – alex3000

+0

확인. 이것이 맞다면 대답을 수락 할 수 있습니다. –

21

스트레이트 예에 주어진

//obtain the array that refrences others array 
    TypedArray plantArray=getResources().obtainTypedArray(R.array.plants); 
    //obtain the referenced arrays 
    CharSequence[] ginkoArray=plantArray.getTextArray(0); 
    //... 
    CharSequence[] orlayaArray=plantArray.getTextArray(3); 
+1

문자열 배열에 대한 참조를 사용할 수 없습니다. – alex3000

+0

문자열 배열을 문자열 배열에 넣을 이유가 무엇입니까? 그게 가능한가? 내게는 문자열 배열이 아닌 항목 안에 문자열 리소스 만 넣을 수있는 것 같습니다. – eMich

+2

@eMich 여기서 문자열 배열을 문자열 배열 안에 두는 것에 대해 언급 한 적이 있습니까? –

1
public class Test extends ListActivity { 
    String[] presidents; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ListView lstView = getListView(); 
    // lstView.setChoiceMode(0); //CHOICE_MODE_NONE 
    // lstView.setChoiceMode(1); //CHOICE_MODE_SINGLE 
    lstView.setChoiceMode(2); // CHOICE_MODE_MULTIPLE 
    lstView.setTextFilterEnabled(true); 

    presidents = getResources().getStringArray(R.array.presidents_array); 

    setListAdapter(new ArrayAdapter<String>(this, 
     android.R.layout.simple_list_item_checked, presidents)); 
    } 

    public void onListItemClick(ListView parent, View v, int position, long id) { 
    parent.setItemChecked(position, parent.isItemChecked(position)); 

    Toast.makeText(this, "You have selected " + presidents[position], 
     Toast.LENGTH_SHORT).show(); 
    } 
}; 

main.xml에를

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 



</LinearLayout> 

문자열 .xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="hello">Hello World, MainActivity!</string> 
    <string name="app_name">BasicViews5</string> 
    <string-array name="presidents_array"> 
     <item>Dwight D. Eisenhower</item> 
     <item>John F. Kennedy</item> 
     <item>Lyndon B. Johnson</item> 
     <item>Richard Nixon</item> 
     <item>Gerald Ford</item> 
     <item>Jimmy Carter</item> 
     <item>Ronald Reagan</item> 
     <item>George H. W. Bush</item> 
     <item>Bill Clinton</item> 
     <item>George W. Bush</item> 
     <item>Barack Obama</item> 
    </string-array> 
</resources> 
+0

+1 좋은 답변 :) –