зачеркнуть текст не сохраняет - PullRequest
0 голосов
/ 16 декабря 2018

Я нахожусь в процессе создания приложения со списком продуктов, и я написал код, в котором, когда я нажимаю на элемент, он будет отмечен.

Это мой код для этого раздела:

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                TextView text = (TextView) view;
                if (!text.getPaint().isStrikeThruText()) {
                    text.setPaintFlags(text.getPaintFlags() |  Paint.STRIKE_THRU_TEXT_FLAG);
                }else{
                    text.setPaintFlags(text.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
                }


            }
        });
        }

Он работает точно так, как я хочу, но когда я добавляю другой элемент после того, как элемент помечен, все элементы, которые помеченыМарки исчезают.

Когда я добавляю элемент, он как бы сбрасывается.он не удаляет ни один из моих предметов, только часть strike_thru.любая помощь будет принята с благодарностью!спасибо

1 Ответ

0 голосов
/ 16 декабря 2018

Адаптер ListView содержит метод с именем getView, который вызывается, когда элемент представления списка необходимо отобразить в реальном представлении.Представления в вашем ListView будут отброшены, если вы прокрутите слишком далеко от экрана или лишите законной силы весь ListView.

Я предполагаю, что добавление элемента делает недействительным ListView.

Ваш метод getView долженустановите флажки рисования на вид, который он возвращает.Предполагая, что ваш список отображает String[], вам также понадобится boolean[], чтобы определить, завершен ли элемент.Вам нужно будет инициализировать это для всех ложных, добавьте completed[i] = !completed[i] в начале вашего onItemClick.Затем вы можете проверить competed[i] вместо isStrikeThruText в своем операторе if, позже в этом методе.Наконец, ваш getView может выглядеть следующим образом

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
    }
    TextView textView = (TextView) convertView;
    textView.setText(items[position]);
    if (completed[position]) {
        textView.setPaintFlags(textView.getPaintFlags() |  Paint.STRIKE_THRU_TEXT_FLAG);
    } else {
        textView.setPaintFlags(textView.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
    }
    return textView;
}
...