Любой способ инициализировать несколько представлений с одинаковыми именами идентификаторов? - PullRequest
0 голосов
/ 22 апреля 2020

Я использую CheckBox и столкнулся с аналогичной проблемой при использовании TextViews, следующий метод работает правильно, но является избыточным. Я сделал то же самое, когда использовал TextViews, число которых составляло 10.

 private CheckBox []checkBoxes ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show_toast);

        checkBoxes = new CheckBox[5];
        checkBoxes[0] = findViewById(R.id.checkBox1);
        checkBoxes[1] = findViewById(R.id.checkBox2);
        checkBoxes[2] = findViewById(R.id.checkBox3);
        checkBoxes[3] = findViewById(R.id.checkBox4);
        checkBoxes[4] = findViewById(R.id.checkBox5);
    }

Я дал идентификаторам флажков общее имя, можно ли использовать какую-либо функцию? Я думал, есть ли что-то вроде следующего:

for(int i=1;i<=5;i++){
checkBoxes[i-1]=findViewById(R.id.checkBox(somehow use i));}

Или есть какой-то ИТОГО РАЗНЫЙ подход, который я могу предпринять?

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Если вы пытаетесь упростить вещи:

private int[] ids = {R.id.checkBox1,R.id.checkBox2,R.id.checkBox3,R.id.checkBox4,R.id.checkBox5};

private CheckBox []checkBoxes = new CheckBox[5];

//loop 

for(int i =0 ; i<checkBoxes.length ; i++){
checkBoxes[i] = findViewById(ids[i]);
}

ОБНОВЛЕНИЕ

Это может быть полезно

Вместо идентификаторов, отметьте ваши взгляды:

<LinearLayout
     id = "@id/layout"
      ........

    <CheckBox
         android:tag = "1"
         ......

    <CheckBox
         android:tag = "2"
         ......

    ........

в коде:

private CheckBox []checkBoxes = new CheckBox[5];
private LinearLayout linearLayout;

//on create

linearLayout = findViewById(R.id.layout);

//loop 

for(int i =0 ; i<checkBoxes.length ; i++){
checkBoxes[i] = (CheckBox)linearLayout.findViewWithTag(String.valueOf(i+1));
}
1 голос
/ 22 апреля 2020

Вы можете сделать это, объявив массив int в своих ресурсах, где записи будут вашими идентификаторами CheckBox.

Пример:

<resources>
<integer-array name="check_box_ids">
    <item>@id/checkBox1</item>
    <item>@id/checkBox2</item>
    <item>@id/checkBox3</item>
    <item>@id/checkBox4</item>
</integer-array>

Затем в ваш onCreate, вы будете l oop через ваш локальный массив или тот, который вы создали в своих ресурсах (check_box_ids) - убедитесь, что они имеют одинаковый размер!

int[] checkBoxIds = getResources().getIntArray(R.array.check_box_ids);

for (int i = 0; i < checkBoxIds.length; i++) {
    checkBoxes[i] = findViewById(checkBoxIds[i]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...