Элементы ListView не регистрируют щелчок после прокрутки ListView вверх или вниз. - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть ListView с пользовательским адаптером, который расширяет ArrayAdapter, My ListView имеет 5 различных типов элементов, которые он может содержать, поэтому я использую ArrayAdapter, ну, проблема феястранно для меня, я не уверен, как отладить это.Я опубликую видео.

enter image description here

, как вы можете видеть, я нажимаю на мои Checkbox и Modal элементы без каких-либо проблем в началено как только я прокручиваю вниз и назад, они больше не щелкают!Это действительно странная ошибка, с которой я сталкиваюсь.Вот как я делаю свой адаптер.

Это код класса моего адаптера.Это довольно компактно.

public class SettingAdapter extends ArrayAdapter<Setting> {
    private List<Setting> settings;

    public SettingAdapter(Context context) {
        super(context, 0);
        setSettings(new ArrayList<>());
    }

    public SettingAdapter(Context context, List<Setting> settings) {
        super(context, 0);
        setSettings(settings);
    }

    public void setSettings(List<Setting> settings) {
        this.settings = settings;
        clear();
        addAll(settings);
        notifyDataSetChanged();
    }

    @Override
    public int getViewTypeCount() {
        return 4;
    }

    @Override
    public Setting getItem(int i) {
        return settings.get(i);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return Objects.requireNonNull(getItem(position)).getView(getContext());
    }
}

У меня есть класс abstract с именем Setting my ListView Элементы будут расширять этот класс и реализовывать getView() и такие.

Вотпример.

public class Summary extends Setting {
    private View view;

    public Summary(String name) {
        super(name);
    }

    public int getType() {
        return SettingType.SUMMARY;
    }

    @Override
    public View getView(Context context) {
        if(view == null) {
            view = //Load the view here
        }
        return view;
    }
}

Я также сохраняю свою ссылку View на будущее, я не уверен, что я делаю не так, может кто-нибудь подсказать мне, как отладить это или исправить это?Потратили более 10 часов, но все еще безуспешно.

1 Ответ

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

ОК, попробуйте не кэшировать представление, просто воссоздать его в Setting.getView (контекстный контекст), сохранить состояние просмотра и вернуть его.

Я создаю 4 различных элемента и работаю со мной.

Если вы хотите кэшировать представление, я действительно рекомендую RecyclerView

...