代码之家  ›  专栏  ›  技术社区  ›  SamHoque

在向下和向上滚动ListView后,ListView项不注册单击

  •  0
  • SamHoque  · 技术社区  · 7 年前

    ListView 带有扩展的自定义适配器 ArrayAdapter ,我的ListView 5 它可以容纳不同类型的物品,这就是为什么我使用 定制

    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 我的 列表视图 项将扩展该类并实现 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 回复  |  直到 7 年前
        1
  •  0
  •   Mohamd Ali    7 年前

    好的,尝试不缓存视图,只需在Setting.getView(Context-Context)上重新创建它,然后保存视图的状态并返回它。

    我创建了4个不同的项目,并与我一起工作。

    如果你想缓存视图,我真的推荐 RecyclerView