使用Android 7错误循环的notifyDatasetChanged ListView

时间:2017-08-25 14:50:41

标签: android listview

我的ListView内部EditText输入类型为数字。当我在notifyDatasetChanged()的焦点事件中使用EditText时,我收到错误。

是notifydatasetchanged() - > focus-> notifyDatasetChanged() - >焦点...... 这个错误发生在Android 7或更高版本。

getView()

final ArrayAdapterListProduct.ViewHolder holder = new ArrayAdapterListProduct.ViewHolder();
    holder.caption = (EditText) view.findViewById(R.id.changegift_listview_item_number);
    if (promotionItem.getNumber_choose() != 0) {
        holder.caption.setText(promotionItem.getNumber_choose() + "");
    }
    holder.caption.setId(position);

    holder.caption.addTextChangedListener(new MyTextWatcher(holder.caption));
    int temp_cout_product = 0;
    if (promotionItem.getSoluongtonkho() > promotionItem.getPromotion_canget()) {
        temp_cout_product = promotionItem.getPromotion_canget();
    } else {
        temp_cout_product = promotionItem.getSoluongtonkho();
    }

    holder.caption.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View view, boolean b) {
            if (!b) {
                notifyDataSetChanged();
            }
        }
    });

    holder.caption.setFilters(new InputFilter[]{new InputFilterMinMax(0, temp_cout_product)});
    return view;

所以我无法在editext中输入数字

1 个答案:

答案 0 :(得分:1)

问题是,当视图没有焦点时,您正在OnFocusChangeListener方法内部getView()设置notifyDataSetChanged()。此代码实际发生的情况是,ListView是在初次调用notifyDataSetChanged()的情况下创建的,并且填充了没有焦点的视图。这意味着,每次调用getView()并设置OnFocusChangeListener时,它都会调用notifyDataSetChanged(),从而导致无限循环。

如果您没有看到更多代码或理解为什么要在焦点监听器内调用notifiyDataSetChanged(),那么很难提供帮助。