Доступ к динамически созданным элементам на layout
Я создаю порядка сорока linearlayout через след код
_linerLayout_txt[i] = new LinearLayout(getActivity());
_linerLayout_txt[i].setOrientation(LinearLayout.HORIZONTAL);
_linerLayout_txt[i].setBaselineAligned(false);
LinearLayout.LayoutParams linLayoutParam = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
linLayoutParam.setMargins(0,8,0,0);
linearLayout_main.addView(_linerLayout_txt[i], linLayoutParam);
LinearLayout.LayoutParams lpView;
_check_active_txt[i] = new CheckBox(themedContext);
lpView = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lpView.weight = 0;
_check_active_txt[i].setLayoutParams(lpView);
_linerLayout_txt[i].addView(_check_active_txt[i]);
_check_active_txt[i].setChecked(_Use_parameter[i]);
final int Ty = i;
_check_active_txt[i].setOnClickListener(v -> {
_Use_parameter[Ty] = _check_active_txt[Ty].isChecked();
_save(mActivity);
});
_set_size_checkbox(getActivity(), 18, _check_active_txt[i]);
_name_parameter_txt[i] = new TextView(getActivity());
_name_parameter_txt[i].setText(_Name_parameter_H4M[i]);
lpView = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lpView.weight = 1;
_name_parameter_txt[i].setLayoutParams(lpView);
_linerLayout_txt[i].addView(_name_parameter_txt[i]);
_value_parameter_txt[i] = new TextView(getActivity());
_value_parameter_txt[i].setText("значение");
lpView = new LinearLayout.LayoutParams(dp2px(100, mActivity), LinearLayout.LayoutParams.WRAP_CONTENT);
lpView.weight = 0;
_value_parameter_txt[i].setGravity(Gravity.CENTER);
_value_parameter_txt[i].setLayoutParams(lpView);
_linerLayout_txt[i].addView(_value_parameter_txt[i]);
_range_parameter_txt[i] = new TextView(getActivity());
_range_parameter_txt[i].setText(String.format("%s - %s (%s)", _Value_parameter_low_H4M[i], _Value_parameter_high_H4M[i], _Dimention_parameter_H4M[i]));
switch (i) {
case (13):
case (14):
case (15):
_range_parameter_txt[i].setText(_Dimention_parameter_H4M[i]);
break;
}
lpView = new LinearLayout.LayoutParams(dp2px(200, mActivity), LinearLayout.LayoutParams.WRAP_CONTENT);
lpView.weight = 0;
_range_parameter_txt[i].setGravity(Gravity.CENTER);
_range_parameter_txt[i].setLayoutParams(lpView);
_linerLayout_txt[i].addView(_range_parameter_txt[i]);
Работа интересует с _check_active_txt[i]. Нажатие на checkbox работает нормально. У меня возникает проблема, когда я пытаюсь обратиться к _check_active_txt[i] в обработке нажатия кнопки
btn_select = view.findViewById(R.id.button_select);
btn_select.setOnTouchListener((v, event) -> {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
btn_select.setBackgroundResource(R.drawable.back_red);
for (int i = 0; i < _count_line; i++) { // iterate over all array items and assign them text.
_check_active_txt[i].setChecked(true);
_Use_parameter[i] = true;
}
if (getActivity() != null) {
_save(getActivity());
}
} else {
btn_select.setBackgroundResource(R.drawable.back_blue);
}
return true;
});
Массив, говорит, пустой у вас. Как мне получить доступ к CheckBox на созданных layout?
Ответы (1 шт):
Автор решения: Arty Morris
→ Ссылка
Надеюсь кому-нибудь поможет, решение такое:
ArrayList<View> layoutCheckBox = linearLayout_main.getTouchables();
for (View v1 : layoutCheckBox){
if (v1 instanceof CheckBox) {
((CheckBox)v1).setChecked(true);
}
}