2016-10-25 5 views
0

У меня есть собственное listview, и для каждой строки их один Редактировать текст и одну кнопку. Я просто хочу получить значение текста редактирования, когда мы нажимаем на эту кнопку.Как получить значение из edittext, который помещается в пользовательский listview

click here for activity image

, как показано на рисунке, я хочу, чтобы получить значение EditText, которое по количеству, когда мы нажмите на добавить в корзину Баттона. Для этого я использовал адаптер и код был, как показано ниже:

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; 
} 
} 
+0

Возможного дубликат [Android - Получить каждый EditTexts значение ListView с пользовательским ArrayAdapter] (http://stackoverflow.com/questions/23953066/android-get-each-edittexts-values-of-listview-with -custom-arrayadapter) – Rahul

ответ

0

Использование Lists, Recyclerviews и т.д. для отображения данных), хранить все значения вашего EditText в моделях, которые подключены к вашему списку с адаптером.

например, если вы отредактируете некоторый edittext в позиции 5, затем сохраните это значение редактирования, когда оно будет немедленно изменено в модели списка, подключенной к вашему представлению, с адаптером в позиции 4 (сначала 0). Или вы можете сохранить его в модели, когда закончите редактирование, но в любом случае сохраните модель. Не держите свои данные в views, это плохая практика) Например, recyclerview повторно использует представления, поэтому ваша простенькая потеря ваших данных при прокрутке)

1

Другой практикой является использование шаблона ViewHolder. В clickListener holder.btn_addto_Cart вы можете получить данные из этого 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(); 
     } 
    }); 
}