Android удаление элемента из массива

252
29 января 2018, 05:50

У меня есть программно создаваемые записи, это TextView и его Checkbox. Мне нужно изменить код, чтобы при определенных условиях удалить их вместе. Вот код их создания:

ArrayList<LinearLayout.LayoutParams> lParams_r = new ArrayList<LinearLayout.LayoutParams>();
    int size_strok_r = 250;
    int check_left_margin = 125;
    fontW = 11;
    lParams_r.add(0, new LinearLayout.LayoutParams(size_strok_r, wrapContent));
    lParams_r.get(0).gravity = Gravity.LEFT;
    ArrayList<LinearLayout.LayoutParams> lParams_check_r = new ArrayList<LinearLayout.LayoutParams>();
    lParams_check_r.add(0, new LinearLayout.LayoutParams(size_strok, matchParent));
    lParams_check_r.get(0).gravity = Gravity.RIGHT;
    lParams_check_r.get(0).leftMargin = check_left_margin;
    ArrayList<LinearLayout> LNew_r = new ArrayList<LinearLayout>();
    LNew_r.add(0, new LinearLayout(this));
    LNew_r.get(0).setPadding(0, 7, 0, 0);
    if (first_schet_id == 0) first_schet_id = idbd;
    ArrayList<TextView> KatNew_r = new ArrayList<TextView>();
    KatNew_r.add(0, new TextView(this));
    htmlTaggedString = "<u><b>" + str + "</b></u>";
    textSpan = android.text.Html.fromHtml(htmlTaggedString);
    KatNew_r.get(0).setMaxLines(1);
    KatNew_r.get(0).setId(idbd + 98989);
    KatNew_r.get(0).setTag(idbd + 98989);
    KatNew_r.get(0).setText(textSpan);
    KatNew_r.get(0).setTextSize(fontW);
    KatNew_r.get(0).setPadding(20, 10, 0, 0);
    KatNew_r.get(0).setTextColor(getResources().getColor(R.color.white_cl));
    KatNew_r.get(0).setTypeface(typeFace);
    LNew_r.get(0).addView(KatNew_r.get(0), lParams_r.get(0));
    ArrayList<CheckBox> CheckNew_r = new ArrayList<CheckBox>();
    CheckNew_r.add(0, new CheckBox(this));
    CheckNew_r.get(0).setChecked(true);
    CheckNew_r.get(0).setButtonDrawable(R.drawable.customcheckboxselector);
    CheckNew_r.get(0).setId(idbd + 99999);
    CheckNew_r.get(0).setTag(idbd);
    LNew_r.get(0).addView(CheckNew_r.get(0), lParams_check_r.get(0));
    ArrayList<LinearLayout.LayoutParams> lParamsRM = new ArrayList<LinearLayout.LayoutParams>();
    lParamsRM.add(0, new LinearLayout.LayoutParams(wrapContent, wrapContent));

А вот как я пытаюсь провести удаление:

removeViewFrom(submenu_right, vibranniSCHET + 98989);
removeViewFrom(submenu_right, vibranniSCHET + 99999);
public void removeViewFrom(LinearLayout[] views, int id) {
    for (LinearLayout l : views) {
        l.removeView(findViewById(id));
    }
}

Удаление не срабатывает, и я не знаю почему. Нужна помощь.

Answer 1

Чтобы произвести удаление View, нужно сначала получить этот View. Все элементы содержатся в двух ArrayList для TextView и для CheckBox. Как я понимаю, vibranniSCHET- это порядковый номер выбранного элемента. Чтобы он соответствовал номеру элемента в ArrayList, добавляйте элементы в его конец, а не начало:

KatNew_r.add(new TextView(this));
CheckNew_r.add(new CheckBox(this));

Соответственно, мы можем просто по номеру элемента получить сам элемент.

Передавайте в метод для удаления один параметр: номер элемента, который нужно удалить. Списки с TextView и CheckBox можно хранить глобально. Вот метод для удаления TextView и CheckBox:

public void removeViewFrom(int position) {
    TextView textView = KatNew_r.get(position);
    textView.setVisibility(View.GONE);
    KatNew_r.remove(position);
    CheckBox checkBox = CheckNew_r.get(position);
    checkBox.setVisibility(View.GONE);
    CheckNew_r.remove(position);   
}
READ ALSO
retrofit аутентификация не работает.

retrofit аутентификация не работает.

Я создаю приложение аутентификации, у меня есть 3 методы, первый регистрирует юзера, второй получает client id and secret, а третий получает access and refresh...

302
Ответ на сообщение WebSocket

Ответ на сообщение WebSocket

Подскажите пожалуйстаЕсть ли или как-то можно реализовать систему ответа в websocket на входящее сообщение

171
JAX-RS не создает deployment descripot

JAX-RS не создает deployment descripot

Добрый деньПочему то при создании JAX-rs конфиги создаюмя в классе а не в xml файле как это исправить:?

138