簡體   English   中英

以XML格式分配視圖ID,以編程方式訪問整數

[英]Assign view IDs in XML, access programmatically as integers

我希望能夠以XML格式分配視圖ID,但是可以通過編程方式將它們作為整數訪問,以便輕松地迭代它們。

這是我前進的方向不起作用:

值/ value.xml:

<resources>
    <integer name="int1">101</integer>
    <integer name="int2">102</integer>
    ...
    <integer name="int10">110</integer>
</resources>

布局/ fancy_dialog_fragment.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...etc.>

    <Button android:id="@integer/int1" ... />
    <Button android:id="@integer/int2" ... />
    ...
    <Button android:id="@integer/int10" ...etc. />


</LinearLayout>

FancyDialogFragment.java:

for (int i = 0; i < 10; i++ ) {
    button[i] = (Button) getDialog().findViewById(100+i);
    button[i].setText("foo");
}

這個怎么樣?

這將進入res / values / arrays.xml(您可以隨意調用它):

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="myIds">
        <item>int1</item>
        <item>int2</item>
        <item>int3</item>
        <item>int4</item>
        <item>int5</item>
        <item>int6</item>
        <item>int7</item>
        <item>int8</item>
        <item>int9</item>
        <item>int10</item>
    </string-array>
</resources>

這就是布局的樣子:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...etc.>
    <Button android:id="@+id/int1" .../>
    <Button android:id="@+id/int2" .../>
    <Button android:id="@+id/int3" .../>
    <Button android:id="@+id/int4" .../>
    <Button android:id="@+id/int5" .../>
    <Button android:id="@+id/int6" .../>
    <Button android:id="@+id/int7" .../>
    <Button android:id="@+id/int8" .../>
    <Button android:id="@+id/int9" .../>
    <Button android:id="@+id/int10" .../>
</LinearLayout>

還有代碼:

Resources res = getResources();
String packageName = getPackageName();
String[] ids = res.getStringArray(R.array.myIds);
for (String id : ids) {
    int idInt = res.getIdentifier(id, "id", packageName);
    Button button = (Button) findViewById(idInt);
    button.setText("foo");
}

創建文件res/values/ids.xml並在那里聲明id:

<resources>
    <item name="id_1" type="id"/>
    <item name="id_2" type="id"/>
    <!-- etc. -->
</resources>

接下來在同一個文件或其他地方(比如res/values/arrays.xml )創建一個整數數組,並使用id作為項:

<integer-array name="my_ids">
    <item>@id/id_1</item>
    <item>@id/id_2</item>
    <!-- etc. -->
</integer-array>

現在你可以使用android:id="@id/id_1" (不帶+ )在xml中使用android:id="@id/id_1" ,並在代碼中使用整數數組:

int[] myIds = getResources().obtainTypedArray(R.array.my_ids);
for (int i = 0; ...) {
    int id = myIds.getResourceId(i, 0);
    // do something with id
}

我認為沒有必要這樣做。 你的按鈕ID非常相似。 試試這段代碼:

for(int i = 0; i <count; i ++){
int idInt = res.getIdentifier(id,String.format(“int%d”,i),packageName);
按鈕=(按鈕)findViewById(idInt);
button.setText( “富”);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM