带有 EditText 的动态列表视图不清除 Same Activity 中的值

Dynamic Listview with EditText not clear values in Same Activity

我在我的代码中使用了 ExpandebleListView,行是在 ADD Button 单击时动态生成的。每个新行包含两个 EditText.

现在当我点击清除Button时,它清除了list项,但是当我点击添加新项时,它的EditText.

中显示最新输入的值

那么,如何在不更改 Button Click activity 的情况下清除所有内容和项目?

这是我的清除数据代码

  itemBean.clear();
  ItemBean objBean = new ItemBean();
  objBean.Qty = "";
  objBean.Rate = "";
  objBean.Total = "";
  itemBean.add(objBean);
  listviewAdapterForItem.notifyDataSetChanged();

这是我添加数据的代码

 ItemBean objBean = new ItemBean();
  objBean.Qty = "";
  objBean.Rate = "";
  objBean.Total = "";
  itemBean.add(objBean);
  listviewAdapterForItem.notifyDataSetChanged();

这是我的适配器代码

public class ListviewAdapterForItem extends BaseAdapter {

Context context;
ArrayList<ItemBean> bean;

public ListviewAdapterForItem(Context context, ArrayList<ItemBean> itemBeans) {
    this.context = context;
    if(this.bean != null){
        this.bean.clear();
    }
    this.bean = itemBeans;
}

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

@Override
public Object getItem(int position) {
    return bean.get(position);
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    final ViewHolder viewHolder;

    if (convertView == null){
        LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        convertView = layoutInflater.inflate(R.layout.list_row_items,null);

        viewHolder = new ViewHolder();
        viewHolder.editQty = convertView.findViewById(R.id.editQty);
        viewHolder.editRate = convertView.findViewById(R.id.editRate);
        viewHolder.txtRs = convertView.findViewById(R.id.txtRs);
        convertView.setTag(viewHolder);

    }else {

        viewHolder = (ViewHolder)convertView.getTag();
    }

    ItemBean objBean = (ItemBean) getItem(position);
    if(objBean != null) {
        viewHolder.editQty.setText(objBean.getQty());
        viewHolder.editRate.setText(objBean.getRate());
        viewHolder.txtRs.setText(objBean.getTotal());
    }
}
}

我认为您的代码中存在一些逻辑错误,首先是为了清楚

bean.clear();
ItemBean objBean = new ItemBean();
objBean.Qty = "";
objBean.Rate = "";
objBean.Total = "";
bean.add(objBean);
listviewAdapterForItem.notifyDataSetChanged();

并添加因为 bean 是您的项目列表

  ItemBean objBean = new ItemBean();
  objBean.Qty = "abc";   // some dummy values to test
  objBean.Rate = "xyz";
  objBean.Total = "abc";
  bean.add(objBean);
  listviewAdapterForItem.notifyDataSetChanged();

如果你想清除所有项目,那么你应该这样做

bean.clear(); // it will clear all your list, what you are doing is clearing or removing one item

好吧,在你的 getView() 函数中获取编辑文本的引用并在那里清除它

viewHolder.editQty= (EditText) convertView.findViewById(R.id.exitText);// change editext accordingly
editText.getText().clear();

其他解决方案可以声明一些类型为 String 的 xyz 变量,将其初始化为空值,如 String xyz = "" 然后

editText.setText(xyz);

希望对您有所帮助

您没有为您的 Editext 设置任何值 您应该在 getView()

 @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        final ViewHolder viewHolder;

        if (convertView == null){
            LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            convertView = layoutInflater.inflate(R.layout.list_row_items,null);

            viewHolder = new ViewHolder();
            viewHolder.editQty = convertView.findViewById(R.id.editQty);
            viewHolder.editRate = convertView.findViewById(R.id.editRate);
            viewHolder.txtRs = convertView.findViewById(R.id.txtRs);
            convertView.setTag(viewHolder);

        }else {

            viewHolder = (ViewHolder)convertView.getTag();
        }

        String Qty =bean.get(position).Qty;
        viewHolder.editQty.setText(Qty);
        viewHolder.editQty.addTextChangedListener(new onEditTextchange(holder.editQty, position));
    }



public class onEditTextchange implements TextWatcher {


        EditText getvalue;
        int pos;

        public onEditTextchange(EditText getvalue, int position) {
            this.getvalue = getvalue;
            this.pos = position;
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            ItemBean objBean = new ItemBean();
            objBean.Qty = getvalue.getText().toString();
            objBean.Rate = items.get(pos).question;
            objBean.Total = items.get(pos).question_id;
            bean.set(pos, objBean);
        }
    }

希望对您有所帮助