Anonymous
Количество позиций в корзине: увеличение/уменьшение и добавление в корзину.
Сообщение
Anonymous » 21 фев 2026, 18:09
Привет всем, я использую собственное представление списка для получения данных с сервера и отображения в представлении списка. Я могу получить данные и показать их в представлении списка, но я не знаю, как реализовать событие нажатия кнопки внутри элемента списка. Есть две кнопки для увеличения и уменьшения количества. Мой прослушиватель кликов работает, но работает неправильно. Когда я нажимаю «Увеличить» или «Уменьшить» товар, он должен быть добавлен в корзину. Пожалуйста, помогите мне исправить эту проблему. Я искал слишком много сообщений в , но не смог этого понять...
Вот код моего класса адаптера:
Код: Выделить всё
public class ProductsAdapter extends BaseAdapter {
private ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener();
private Context context;
private ArrayList postItems;
public SharedPreferences settings;
public final String PREFS_NAME = "Products";
DisplayImageOptions options;
ImageLoaderConfiguration imgconfig;
private static int _counter = 0;
private String _stringVal;
public ProductsAdapter(Context context, ArrayList arraylist){
this.context = context;
File cacheDir = StorageUtils.getCacheDirectory(context);
options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.loading)
.showImageForEmptyUri(R.drawable.loading)
.showImageOnFail(R.drawable.loading)
.cacheInMemory(true)
.cacheOnDisk(true)
.considerExifParams(true)
.displayer(new SimpleBitmapDisplayer())
.imageScaleType(ImageScaleType.EXACTLY)
.build();
imgconfig = new ImageLoaderConfiguration.Builder(context)
.build();
ImageLoader.getInstance().init(imgconfig);
postItems = arraylist;
settings = context.getSharedPreferences(PREFS_NAME, 0);
}
@Override
public int getCount() {
return postItems.size();
}
@Override
public Object getItem(int position) {
return postItems.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater mInflater = (LayoutInflater)
context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.row_products, null);
}
final HashMap map = postItems.get(position);
ImageView imgProduct = (ImageView)convertView.findViewById(R.id.proimage);
ImageLoader.getInstance().displayImage(ConstValue.PRO_IMAGE_BIG_PATH+map.get("image"), imgProduct, options, animateFirstListener);
TextView txtTitle = (TextView)convertView.findViewById(R.id.proTitle);
txtTitle.setText(map.get("title"));
TextView txtPrice = (TextView)convertView.findViewById(R.id.txtprice);
txtPrice.setText(map.get("price"));
TextView textDiscount = (TextView)convertView.findViewById(R.id.textDiscount);
textDiscount.setVisibility(View.GONE);
TextView txtDiscountFlag = (TextView)convertView.findViewById(R.id.textDiscountFlag);
txtDiscountFlag.setVisibility(View.GONE);
TextView textCurrency = (TextView)convertView.findViewById(R.id.textCurrency);
textCurrency.setText(map.get("currency"));
final TextView value = (TextView)convertView.findViewById(R.id.textView3);
Button txtminus = (Button) convertView.findViewById(R.id.minus);
txtminus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("src", "Decreasing value...");
_counter--;
_stringVal = Integer.toString(_counter);
value.setText(_stringVal);
if (_counter < 0)
{
value.setText("0");
}
}
});
Button txtplus = (Button) convertView.findViewById(R.id.plus);
txtplus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("src", "Increasing value...");
_counter++;
_stringVal = Integer.toString(_counter);
value.setText(_stringVal);
}
});
if(!map.get("discount").equalsIgnoreCase("") && !map.get("discount").equalsIgnoreCase("0")){
Double discount = Double.parseDouble(map.get("discount"));
Double price = Double.parseDouble(map.get("price"));
Double discount_amount = discount * price / 100;
Double effected_price = price - discount_amount ;
//txtPrice.setBackgroundResource(R.drawable.strike_trough);
txtPrice.setPaintFlags(txtPrice.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
textDiscount.setVisibility(View.VISIBLE);
textDiscount.setText(effected_price.toString());
txtDiscountFlag.setVisibility(View.VISIBLE);
txtDiscountFlag.setText(discount+"% off");
}
TextView txtUnit = (TextView)convertView.findViewById(R.id.txtunit);
txtUnit.setText(map.get("gmqty"));
TextView txtgm = (TextView)convertView.findViewById(R.id.txtgm);
txtgm.setText(map.get("unit"));
int a = Integer.parseInt(map.get("total_qty_stock").toString());
int b = Integer.parseInt(map.get("consume_qty_stock").toString());
int result = a - b;
TextView txtstock = (TextView)convertView.findViewById(R.id.stock);
txtstock.setText(String.valueOf(result)+" "+map.get("type")+" In Stock");
//txtstock.setText(map.get("stock")+" "+map.get("type")+" In Stock");
return convertView;
}
}
Вот мой код ProductActivity
публичный класс ProductsActivity расширяет ActionBarActivity {
Код: Выделить всё
public SharedPreferences settings;
public ConnectionDetector cd;
static ArrayList products_array;
ProductsAdapter adapter;
ListView products_listview;
DisplayImageOptions options;
ImageLoaderConfiguration imgconfig;
ProgressDialog dialog;
TextView txtcount;
Button btn;
private ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener();
HashMap catMap;
@SuppressWarnings("unchecked")
@Override
protected void onCreate(Bundle savedInstanceState) {
settings = getSharedPreferences(ConstValue.MAIN_PREF, 0);
cd = new ConnectionDetector(getApplicationContext());
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_products);
/* ActionBar mActionBar = getActionBar();
mActionBar.setDisplayShowHomeEnabled(true);
mActionBar.setDisplayShowTitleEnabled(true);
LayoutInflater mInflater = LayoutInflater.from(this);
View mCustomView = mInflater.inflate(R.layout.custom_actionbar, null);
TextView mTitleTextView = (TextView) mCustomView.findViewById(R.id.title_text);
mTitleTextView.setText("My Own Title");
mActionBar.setCustomView(mCustomView);
mActionBar.setDisplayShowCustomEnabled(true); */
settings = getSharedPreferences(ConstValue.MAIN_PREF, 0);
cd=new ConnectionDetector(this);
File cacheDir = StorageUtils.getCacheDirectory(this);
options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.loading)
.showImageForEmptyUri(R.drawable.loading)
.showImageOnFail(R.drawable.loading)
.cacheInMemory(true)
.cacheOnDisk(true)
.considerExifParams(true)
.displayer(new SimpleBitmapDisplayer())
.imageScaleType(ImageScaleType.NONE)
.build();
imgconfig = new ImageLoaderConfiguration.Builder(this)
.build();
ImageLoader.getInstance().init(imgconfig);
ArrayList categoryArray = new ArrayList();
try {
categoryArray = (ArrayList) ObjectSerializer.deserialize(settings.getString("categoryname", ObjectSerializer.serialize(new ArrayList())));
}catch (IOException e) {
e.printStackTrace();
}
catMap = new HashMap();
catMap = categoryArray.get(getIntent().getExtras().getInt("position"));
products_array = new ArrayList();
try {
products_array = (ArrayList) ObjectSerializer.deserialize(settings.getString("products_"+catMap.get("id"), ObjectSerializer.serialize(new ArrayList())));
}catch (IOException e) {
e.printStackTrace();
}
products_listview = (ListView)findViewById(R.id.listView1);
adapter = new ProductsAdapter(getApplicationContext(), products_array);
products_listview.setAdapter(adapter);
TextView txtTitle = (TextView)findViewById(R.id.catname);
txtTitle.setText(catMap.get("name"));
txtcount = (TextView)findViewById(R.id.textcount);
btn = (Button) findViewById(R.id.button);
products_listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView arg0, View arg1, final int position,
long id) {
// TODO Auto-generated method stub
try {
settings.edit().putString("selected_product", ObjectSerializer.serialize(products_array.get(position))).commit();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Intent intent = new Intent(ProductsActivity.this, ProductdetailActivity.class);
intent.putExtra("position", position);
startActivity(intent);
}
});
new loadProductsTask().execute(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public class loadProductsTask extends AsyncTask {
JSONParser jParser;
JSONObject json;
String count;
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
}
@Override
protected void onPostExecute(ArrayList result) {
// TODO Auto-generated method stub
if (result!=null) {
//adapter.notifyDataSetChanged();
}
try {
settings.edit().putString("products_"+catMap.get("id"), ObjectSerializer.serialize(products_array)).commit();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
txtcount.setText(count);
adapter.notifyDataSetChanged();
super.onPostExecute(result);
}
@Override
protected void onProgressUpdate(Void... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
}
@Override
protected void onCancelled(ArrayList result) {
// TODO Auto-generated method stub
super.onCancelled(result);
}
@Override
protected ArrayList doInBackground(
Boolean... params) {
// TODO Auto-generated method stub
try {
jParser = new JSONParser();
if(cd.isConnectingToInternet())
{
String urlstring = ConstValue.JSON_PRODUCTS+"&id="+catMap.get("id");
json = jParser.getJSONFromUrl(urlstring);
count = json.getString("count");
if (json.has("data")) {
if(json.get("data") instanceof JSONArray){
JSONArray jsonDrList = json.getJSONArray("data");
products_array.clear();
for (int i = 0; i < jsonDrList.length(); i++) {
JSONObject obj = jsonDrList.getJSONObject(i);
put_object(obj);
}
}else if(json.get("data") instanceof JSONObject){
put_object(json.getJSONObject("data"));
}
}
}else
{
Toast.makeText(ProductsActivity.this, "Please connect mobile with working Internet", Toast.LENGTH_LONG).show();
}
jParser = null;
json = null;
} catch (Exception e) {
// TODO: handle exception
return null;
}
return null;
}
public void put_object(JSONObject obj){
HashMap map = new HashMap();
try {
map.put("id", obj.getString("id"));
map.put("title", obj.getString("title"));
map.put("slug", obj.getString("slug"));
map.put("description", obj.getString("description"));
map.put("image", obj.getString("image"));
map.put("price", obj.getString("price"));
map.put("currency", obj.getString("currency"));
map.put("discount", obj.getString("discount"));
map.put("cod", obj.getString("cod"));
map.put("emi", obj.getString("emi"));
map.put("status", obj.getString("status"));
map.put("gmqty", obj.getString("gmqty"));
map.put("unit", obj.getString("unit"));
map.put("deliverycharge", obj.getString("deliverycharge"));
map.put("tax", obj.getString("tax"));
map.put("category_id", obj.getString("category_id"));
map.put("on_date", obj.getString("on_date"));
map.put("stock", obj.getString("stock"));
map.put("type", obj.getString("type"));
map.put("total_qty_stock", obj.getString("total_qty_stock"));
map.put("consume_qty_stock", obj.getString("consume_qty_stock"));
products_array.add(map);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Подробнее здесь:
https://stackoverflow.com/questions/387 ... dd-to-cart
1771686565
Anonymous
Привет всем, я использую собственное представление списка для получения данных с сервера и отображения в представлении списка. Я могу получить данные и показать их в представлении списка, но я не знаю, как реализовать событие нажатия кнопки внутри элемента списка. Есть две кнопки для увеличения и уменьшения количества. Мой прослушиватель кликов работает, но работает неправильно. Когда я нажимаю «Увеличить» или «Уменьшить» товар, он должен быть добавлен в корзину. Пожалуйста, помогите мне исправить эту проблему. Я искал слишком много сообщений в , но не смог этого понять... Вот код моего класса адаптера: [code]public class ProductsAdapter extends BaseAdapter { private ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener(); private Context context; private ArrayList postItems; public SharedPreferences settings; public final String PREFS_NAME = "Products"; DisplayImageOptions options; ImageLoaderConfiguration imgconfig; private static int _counter = 0; private String _stringVal; public ProductsAdapter(Context context, ArrayList arraylist){ this.context = context; File cacheDir = StorageUtils.getCacheDirectory(context); options = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.loading) .showImageForEmptyUri(R.drawable.loading) .showImageOnFail(R.drawable.loading) .cacheInMemory(true) .cacheOnDisk(true) .considerExifParams(true) .displayer(new SimpleBitmapDisplayer()) .imageScaleType(ImageScaleType.EXACTLY) .build(); imgconfig = new ImageLoaderConfiguration.Builder(context) .build(); ImageLoader.getInstance().init(imgconfig); postItems = arraylist; settings = context.getSharedPreferences(PREFS_NAME, 0); } @Override public int getCount() { return postItems.size(); } @Override public Object getItem(int position) { return postItems.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); convertView = mInflater.inflate(R.layout.row_products, null); } final HashMap map = postItems.get(position); ImageView imgProduct = (ImageView)convertView.findViewById(R.id.proimage); ImageLoader.getInstance().displayImage(ConstValue.PRO_IMAGE_BIG_PATH+map.get("image"), imgProduct, options, animateFirstListener); TextView txtTitle = (TextView)convertView.findViewById(R.id.proTitle); txtTitle.setText(map.get("title")); TextView txtPrice = (TextView)convertView.findViewById(R.id.txtprice); txtPrice.setText(map.get("price")); TextView textDiscount = (TextView)convertView.findViewById(R.id.textDiscount); textDiscount.setVisibility(View.GONE); TextView txtDiscountFlag = (TextView)convertView.findViewById(R.id.textDiscountFlag); txtDiscountFlag.setVisibility(View.GONE); TextView textCurrency = (TextView)convertView.findViewById(R.id.textCurrency); textCurrency.setText(map.get("currency")); final TextView value = (TextView)convertView.findViewById(R.id.textView3); Button txtminus = (Button) convertView.findViewById(R.id.minus); txtminus.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("src", "Decreasing value..."); _counter--; _stringVal = Integer.toString(_counter); value.setText(_stringVal); if (_counter < 0) { value.setText("0"); } } }); Button txtplus = (Button) convertView.findViewById(R.id.plus); txtplus.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("src", "Increasing value..."); _counter++; _stringVal = Integer.toString(_counter); value.setText(_stringVal); } }); if(!map.get("discount").equalsIgnoreCase("") && !map.get("discount").equalsIgnoreCase("0")){ Double discount = Double.parseDouble(map.get("discount")); Double price = Double.parseDouble(map.get("price")); Double discount_amount = discount * price / 100; Double effected_price = price - discount_amount ; //txtPrice.setBackgroundResource(R.drawable.strike_trough); txtPrice.setPaintFlags(txtPrice.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); textDiscount.setVisibility(View.VISIBLE); textDiscount.setText(effected_price.toString()); txtDiscountFlag.setVisibility(View.VISIBLE); txtDiscountFlag.setText(discount+"% off"); } TextView txtUnit = (TextView)convertView.findViewById(R.id.txtunit); txtUnit.setText(map.get("gmqty")); TextView txtgm = (TextView)convertView.findViewById(R.id.txtgm); txtgm.setText(map.get("unit")); int a = Integer.parseInt(map.get("total_qty_stock").toString()); int b = Integer.parseInt(map.get("consume_qty_stock").toString()); int result = a - b; TextView txtstock = (TextView)convertView.findViewById(R.id.stock); txtstock.setText(String.valueOf(result)+" "+map.get("type")+" In Stock"); //txtstock.setText(map.get("stock")+" "+map.get("type")+" In Stock"); return convertView; } } [/code] [img]https://i.sstatic.net/k0Xpw.png[/img] Вот мой код ProductActivity публичный класс ProductsActivity расширяет ActionBarActivity { [code]public SharedPreferences settings; public ConnectionDetector cd; static ArrayList products_array; ProductsAdapter adapter; ListView products_listview; DisplayImageOptions options; ImageLoaderConfiguration imgconfig; ProgressDialog dialog; TextView txtcount; Button btn; private ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener(); HashMap catMap; @SuppressWarnings("unchecked") @Override protected void onCreate(Bundle savedInstanceState) { settings = getSharedPreferences(ConstValue.MAIN_PREF, 0); cd = new ConnectionDetector(getApplicationContext()); super.onCreate(savedInstanceState); setContentView(R.layout.activity_products); /* ActionBar mActionBar = getActionBar(); mActionBar.setDisplayShowHomeEnabled(true); mActionBar.setDisplayShowTitleEnabled(true); LayoutInflater mInflater = LayoutInflater.from(this); View mCustomView = mInflater.inflate(R.layout.custom_actionbar, null); TextView mTitleTextView = (TextView) mCustomView.findViewById(R.id.title_text); mTitleTextView.setText("My Own Title"); mActionBar.setCustomView(mCustomView); mActionBar.setDisplayShowCustomEnabled(true); */ settings = getSharedPreferences(ConstValue.MAIN_PREF, 0); cd=new ConnectionDetector(this); File cacheDir = StorageUtils.getCacheDirectory(this); options = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.loading) .showImageForEmptyUri(R.drawable.loading) .showImageOnFail(R.drawable.loading) .cacheInMemory(true) .cacheOnDisk(true) .considerExifParams(true) .displayer(new SimpleBitmapDisplayer()) .imageScaleType(ImageScaleType.NONE) .build(); imgconfig = new ImageLoaderConfiguration.Builder(this) .build(); ImageLoader.getInstance().init(imgconfig); ArrayList categoryArray = new ArrayList(); try { categoryArray = (ArrayList) ObjectSerializer.deserialize(settings.getString("categoryname", ObjectSerializer.serialize(new ArrayList()))); }catch (IOException e) { e.printStackTrace(); } catMap = new HashMap(); catMap = categoryArray.get(getIntent().getExtras().getInt("position")); products_array = new ArrayList(); try { products_array = (ArrayList) ObjectSerializer.deserialize(settings.getString("products_"+catMap.get("id"), ObjectSerializer.serialize(new ArrayList()))); }catch (IOException e) { e.printStackTrace(); } products_listview = (ListView)findViewById(R.id.listView1); adapter = new ProductsAdapter(getApplicationContext(), products_array); products_listview.setAdapter(adapter); TextView txtTitle = (TextView)findViewById(R.id.catname); txtTitle.setText(catMap.get("name")); txtcount = (TextView)findViewById(R.id.textcount); btn = (Button) findViewById(R.id.button); products_listview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView arg0, View arg1, final int position, long id) { // TODO Auto-generated method stub try { settings.edit().putString("selected_product", ObjectSerializer.serialize(products_array.get(position))).commit(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } Intent intent = new Intent(ProductsActivity.this, ProductdetailActivity.class); intent.putExtra("position", position); startActivity(intent); } }); new loadProductsTask().execute(true); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public class loadProductsTask extends AsyncTask { JSONParser jParser; JSONObject json; String count; @Override protected void onPreExecute() { // TODO Auto-generated method stub super.onPreExecute(); } @Override protected void onPostExecute(ArrayList result) { // TODO Auto-generated method stub if (result!=null) { //adapter.notifyDataSetChanged(); } try { settings.edit().putString("products_"+catMap.get("id"), ObjectSerializer.serialize(products_array)).commit(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } txtcount.setText(count); adapter.notifyDataSetChanged(); super.onPostExecute(result); } @Override protected void onProgressUpdate(Void... values) { // TODO Auto-generated method stub super.onProgressUpdate(values); } @Override protected void onCancelled(ArrayList result) { // TODO Auto-generated method stub super.onCancelled(result); } @Override protected ArrayList doInBackground( Boolean... params) { // TODO Auto-generated method stub try { jParser = new JSONParser(); if(cd.isConnectingToInternet()) { String urlstring = ConstValue.JSON_PRODUCTS+"&id="+catMap.get("id"); json = jParser.getJSONFromUrl(urlstring); count = json.getString("count"); if (json.has("data")) { if(json.get("data") instanceof JSONArray){ JSONArray jsonDrList = json.getJSONArray("data"); products_array.clear(); for (int i = 0; i < jsonDrList.length(); i++) { JSONObject obj = jsonDrList.getJSONObject(i); put_object(obj); } }else if(json.get("data") instanceof JSONObject){ put_object(json.getJSONObject("data")); } } }else { Toast.makeText(ProductsActivity.this, "Please connect mobile with working Internet", Toast.LENGTH_LONG).show(); } jParser = null; json = null; } catch (Exception e) { // TODO: handle exception return null; } return null; } public void put_object(JSONObject obj){ HashMap map = new HashMap(); try { map.put("id", obj.getString("id")); map.put("title", obj.getString("title")); map.put("slug", obj.getString("slug")); map.put("description", obj.getString("description")); map.put("image", obj.getString("image")); map.put("price", obj.getString("price")); map.put("currency", obj.getString("currency")); map.put("discount", obj.getString("discount")); map.put("cod", obj.getString("cod")); map.put("emi", obj.getString("emi")); map.put("status", obj.getString("status")); map.put("gmqty", obj.getString("gmqty")); map.put("unit", obj.getString("unit")); map.put("deliverycharge", obj.getString("deliverycharge")); map.put("tax", obj.getString("tax")); map.put("category_id", obj.getString("category_id")); map.put("on_date", obj.getString("on_date")); map.put("stock", obj.getString("stock")); map.put("type", obj.getString("type")); map.put("total_qty_stock", obj.getString("total_qty_stock")); map.put("consume_qty_stock", obj.getString("consume_qty_stock")); products_array.add(map); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } [/code] Подробнее здесь: [url]https://stackoverflow.com/questions/38721603/cart-item-count-increment-decrement-add-to-cart[/url]