如何从放置在自定义列表视图中的edittext获取值

时间:2016-10-25 19:23:44

标签: android listview

我有一个自定义列表视图,每行都有一个编辑文本和一个按钮。 我只想在点击该按钮时获得编辑文本的价值。

click here for activity image

如图所示我想获得编辑文本的价值,当点击添加到购物车按钮时为数量。 为此,我使用了适配器,代码如下:

public class ProductList_Adapter extends ArrayAdapter {

Context context;
int resource;
List<ProductList_ModelClass> productList_modelClasses = new ArrayList<>();

TextView tv_product_title;
TextView tv_product_price;
ImageView img_productImage;
RatingBar rb_custom_productlist;
EditText et_productQty;
Button btn_addto_Cart;
String product_Qty;

public ProductList_Adapter(Context context, int resource, List objects) {
    super(context, resource, objects);

    this.context = context;
    this.resource = resource;
    this.productList_modelClasses = objects;
}

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

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

    if (convertView == null) {
        LayoutInflater layoutInflater = ((Activity) context).getLayoutInflater();
        convertView = layoutInflater.inflate(resource, parent, false);
    }

    img_productImage = (ImageView) convertView.findViewById(R.id.img_productImage);
    tv_product_title = (TextView) convertView.findViewById(R.id.tv_product_title);
    tv_product_price = (TextView) convertView.findViewById(R.id.tv_product_price);
    rb_custom_productlist = (RatingBar) convertView.findViewById(R.id.rb_custom_productlist);
    et_productQty = (EditText) convertView.findViewById(R.id.et_productQty);
    btn_addto_Cart = (Button) convertView.findViewById(R.id.btn_addto_Cart);


    Picasso.with(context)
            .load(productList_modelClasses.get(position).getProduct_image())
            .resize(250, 250)
            .placeholder(R.mipmap.icon_placeholder)   // optional
            .error(R.mipmap.icon_error)      // optional
            .into(img_productImage);

    tv_product_title.setText(productList_modelClasses.get(position).getProduct_name());
    rb_custom_productlist.setRating(productList_modelClasses.get(position).getProduct_rating());
    tv_product_price.setText("₹ " + productList_modelClasses.get(position).getProduct_price());


    product_Qty = et_productQty.getText().toString();

    btn_addto_Cart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Toast.makeText(context, product_Qty + , Toast.LENGTH_SHORT).show();
        }
    });

    convertView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(context, productList_modelClasses.get(position).getProduct_name(), Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(context, ProductActivity.class);
            intent.putExtra("product_id", productList_modelClasses.get(position).getProduct_id());
            context.startActivity(intent);


        }
    });

    return convertView;
}
}

2 个答案:

答案 0 :(得分:1)

另一种做法是使用ViewHolder模式。 在holder.btn_addto_Cart的clickListener中,您可以从该edittext获取数据并进行处理。

static class ViewHolder{
    TextView tv_product_title;
    TextView tv_product_price;
    ImageView img_productImage;
    RatingBar rb_custom_productlist;
    EditText et_productQty;
    Button btn_addto_Cart;
    String product_Qty;
}

public View getView(final int position, View convertView, ViewGroup parent) {
    final ViewHolder holder;

    if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(resouce, parent, false);

        holder = new ViewHolder();
        holder.img_productImage = (ImageView) findViewById(R.id.img_productImage);
        holder.tv_product_title = (TextView) findViewById(R.id.tv_product_title);
        holder.tv_product_price = (TextView) findViewById(R.id.tv_product_price);
        holder.rb_custom_productlist = (RatingBar) findViewById(R.id.rb_custom_productlist);
        holder.et_productQty = (EditText) findViewById(R.id.et_productQty);
        holder.btn_addto_Cart = (Button)findViewById(R.id.btn_addto_Cart);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }


    holder.btn_addto_Cart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Toast.makeText(context, holder.et_productQty.getText() , Toast.LENGTH_SHORT).show();
        }
    });
}

答案 1 :(得分:0)

使用ListsRecyclerviews等显示数据),将所有edittext的值保存在使用适配器连接到列表的模型中。

例如,如果您编辑位置5中的某个edittext,则在连接到您的视图的列表模型中立即更改此编辑值时,将适配器保存在位置4(0为第一个)。或者,您可以在结束编辑时将其保存到模型中,但无论如何都要保存到模型中。不要将您的数据保存在views这是不好的做法)例如,recyclerview重新使用视图,这样滚动时您的数据就会简单地丢失)