如何将recyclelerview中的editext值转换为字符串列表

时间:2017-10-20 12:49:41

标签: java android android-recyclerview android-edittext

editext的每个项目的项目recyclerview字段(带有价格的carname)中,当我在保存时click需要将所有字段值都放入{{1}的列表中,当我在滚动值互换后输入值时。这是我的代码。

string

以下是从editext值获取字符串列表的方法。

private class PricesAdapter extends RecyclerView.Adapter<PricesAdapter.MyViewHolder> {

 @Override
 public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_cars_type_item, parent, false);
    return new MyViewHolder(layoutView);
  }

 @Override
 public void onBindViewHolder(MyViewHolder holder, int position) {
    holder.tvCarType.setText(carsList.get(position));
    holder.edtPrice.setText("");
    holder.edtPrice.setTag(position);
  }

@Override
   public int getItemCount() {
   return carsList.size();
  }

@Override
   public int getItemViewType(int position) {
   return super.getItemViewType(position);
  }

public class MyViewHolder extends RecyclerView.ViewHolder {

  TextView tvCarType;
  EditText edtPrice;

  public MyViewHolder(View itemView) {
     super(itemView);
     tvCarType=(TextView)itemView.findViewById(R.id.tvCarType);
     edtPrice=(EditText)itemView.findViewById(R.id.edtPrice);
        }
    }
  }
}

这是我的错误。

public List<string> getPriceValues(){
   List<String> priceList = new ArrayList<>();

   for (int i = 0; i < carsList.size(); i++) {

     View viewHolder=rvPrices.getRootView();

     View view1=mLayoutManager.findViewByPosition(i);
     View view=rvPrices.getChildAt(i);
     View root=rvPrices.getRootView();
     //            PricesAdapter.MyViewHolder myViewHolder=(PricesAdapter.MyViewHolder)rvPrices.findViewHolderForLayoutPosition(i);
             //            String price=myViewHolder.edtPrice.getText().toString().trim();
     EditText edtPrice=(EditText) view.findViewById(R.id.edtPrice);
     String price = edtPrice.getText().toString().trim();
     priceList.add(price);
  }                    
  return priceList;
}

1 个答案:

答案 0 :(得分:0)

您当前的实施将无法按预期运作。如果您在任何EditText中输入文本并开始滚动足够多,系统将回收在屏幕外滚动的视图,您将开始看到之前滚动屏幕的重复文本开始出现。 修复:您应该创建一个ArrayList或数组字符串。在MyViewHolder内部,您应该实现文本更改侦听器,并且每当EditText的文本发生更改时,您都会使用getAdapterPosition()方法将该文本值添加到给定ViewHolder的逻辑位置的ArrayList中。 getAdapterPositio方法是ViewHolder类上的一个方法,所有子类都默认继承。使用该方法的值作为ArrayList /数组的索引,然后存储从文本更改侦听器检索的文本值。在适配器的onBindViewHolder()方法内部,您应该使用position参数检查ArrayList /数组,以检查是否存在字符串,如果在EditText上设置了字符串,否则如果null将文本设置为空字符串。这将确保您在滚动期间看不到错误地回收文本值。