我想通过custom listview
和clicking
向button
添加一些新行。我的每一行都包含一个EditText
。我需要每次在clicking
上的Button
上创建新行。我成功完成了任务,但是这里面临的问题是,clicking
是Button
的时候,会创建一个新行,但它刷新了整个自定义listview
并替换了我所有的内容用空的用EditText
写的(它正在创建一些新的EditText
)。我不需要这种情况。即使创建了新行,我也需要保留在EditText
中写的全部数据。
这是我的代码,名为
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;
}
答案 0 :(得分:0)
我认为使用notifyDataSetChanged()
函数是不可能的,但是您可以尝试使用此https://android.jlelse.eu/smart-way-to-update-recyclerview-using-diffutil-345941a160e0
答案 1 :(得分:0)
您可以通过将EditText
的数据根据其位置保存到ArrayList
并在getView()
中将数据从ArrayList
和setText()
到{{ 1}}
希望这会有所帮助