首页 > 解决方案 > 在列表视图中调用“notifydatasetchanged”时,以前的行正在替换为新行

问题描述

custom listview我想通过clickinga向 a 添加一些新行button。我的每一行都包含一个EditText. 我的需要是每次都创建新clickingButton。我成功地做到了,但这里面临的问题是,当 是 时clickingButton将创建一个新行,但它刷新了整个自定义,它用空listview替换了我写的所有内容(它正在创建一些新的)。我不需要那样做。即使在创建新行之后,我也需要保留我写的全部数据。EditTextEditTextEditText

这是我调用的代码adapter

final RequestAttributeAdapter adapter = new RequestAttributeAdapter(context,listItems);
    lv_Attribute.setAdapter(adapter);
    tvAddAttribute.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            listItems.add("1");
            adapter.notifyDataSetChanged();
        }
    });

这是我的adapter class

private ArrayList<String> attributes;
private LayoutInflater inflater;

public RequestAttributeAdapter(Context context, ArrayList<String> attributes) {
    this.attributes = attributes;
    inflater = LayoutInflater.from(context);
}

@Override
public int getCount() {
    return attributes.size();
}


@Override
public Object getItem(int i) {
    return null;
}

@Override
public long getItemId(int i) {
    return 0;
}

@SuppressLint({"InflateParams", "ViewHolder"})
@Override
public View getView(final int position, View view, ViewGroup viewGroup) {
    view = inflater.inflate(R.layout.item_attribute_list,null);
    FloatingEditText ftName = (FloatingEditText) view.findViewById(R.id.etAttrName);
    TextView attributeNumber = (TextView) view.findViewById(R.id.attributeNumber);
    attributeNumber.setText("Attribute : "+(position+1));
    //CheckBox cbRequired = (CheckBox) view.findViewById(R.id.cbRequired);

    //cbRequired.setChecked(attributes.get(position).isRequired());
    //ftName.setText(attributes.get(position).getAttribute_name());
    if (position>0)
        ftName.requestFocus();

    ftName.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void afterTextChanged(Editable editable) {
            //attributes.get(position).setAttribute_name(editable.toString());
        }
    });
    return view;
}

标签: androidlistview

解决方案


您可以通过根据他们的位置保存数据EditText并从和获取数据来实现这一点ArrayListgetView()ArrayListsetText()EditText

希望这会有所帮助


推荐阅读