آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

محاسبه کل قیمت ها در سبد خرید

علی  7 سال پیش  7 سال پیش
0 0

سلام خدمت دوستان :

من سبد خریدی دارم که داخلش آیتم های لیست ویو رو می خوام بگیرم و قیمت ها رو جمع ببندم و نشون بدم. داخل هر آیتم لیست ویو هم یه اسپینر هست که تعداد هر محصول رو می تونه انتخاب کنه مشتری.

حالا می خوام مثلا ۲ تا آیتم اومد از سرور بیاد بر اساس تعداد اسپینر جمع کل قیمت رو به من بده .

باید چطوری این کار رو بکنم . لطفا راهنمایی کنید . داخل ادپتر در متود fill چه کارای باید انجام بشه؟ 

0 0
لطفا کدهاتون رو بنویسید تا بشه دقیق راهنمایی کرد. (7 سال پیش)
 برای این سوال 5 پاسخ وجود دارد.
پاسخ به سوال 
علی  7 سال پیش
0 0

این کد ها : که finalPrice قیمت کل هر آیتم هستش .

  public void fill(final ArrayAdapter<StructShoppingBag> adapter, final StructShoppingBag item, final int position) {


      String CURRENCY = " تومان";
    
      String finalPrice1 = Long.toString(item.finalPrice) + CURRENCY;
      txtFinalPrice.setText(finalPrice1);

      ArrayList<String> a = new ArrayList<>();
      for (int i = 1; i <= item.inventory; i++) {
        a.add(String.valueOf(i));

      }
      ArrayAdapter<String> dataAdapter1 = new ArrayAdapter<String>(AdapterShoppingBag, R.layout.spinner_layout, a);
      dataAdapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
      spinnerCount.setAdapter(dataAdapter1);
      spinnerCount.setSelection(item.count - 1);


      //change item in Spinner
       spinnerCount.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

          Spinner spinner = (Spinner) v;
          item.count =  Integer.parseInt(spinner.getSelectedItem().toString());

          spinnerCount.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parentView, View view, int position, long id) {

             item.count = Integer.parseInt(spinnerCount.getSelectedItem().toString());

              //update counter in Spinner
              pd = ProgressDialog.show(AdapterShoppingBag, null, "لطفا صبر کنید...");
              Thread thread = new Thread(new Runnable() {
                Handler handler = new Handler() {
                  @Override
                  public void handleMessage(Message msg) {
                    pd.dismiss();

                    switch (res) {

                      case "OkUpdateCount":

                        spinnerCount.setOnItemSelectedListener(null);

                        res = "";

                        break;
                      case "NoUpdateCount":

                        Toast.makeText(AdapterShoppingBag, "خطا در بروزرسانی تعداد محصول", Toast.LENGTH_SHORT).show();

                        res = "";
                        break;
                      default:

                        Toast.makeText(G.context, "خطا در انجام عملیات", Toast.LENGTH_SHORT).show();

                        break;
                    }
                    super.handleMessage(msg);

                  }
                };

                @Override
                public void run() {
                  try {

                    Message msg = new Message();

                    CartHelper.updateCount(item.id, item.count, G.sp.getString("mobile", ""));

                    handler.sendMessage(msg);

                  } catch (Exception e) {
                    Log.e("LOG", e.getMessage());
                  }
                }

              });

              thread.start();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parentView) {

            }

          });

          return false;
        }
      });
}
پاسخ به سوال 
علی  7 سال پیش
0 0

خوب این کل قیمت همه آیتم های لیست ویو رو در آوردم حالا چطوری با عوض شدن شماره اسپینر هر آیتم درستش کنم؟

    int pPrice =0;
      for(int i=0;i<G.shopping.size();i++){

        pPrice =  pPrice + G.shopping.get(i).finalPrice;

      }
0 0
ببین من تاحالا به اسپینر کار نکردم ولی ببین میتونی یک متغیر اینت با مقدار پیشرفت 1 درست کنی و قیمت نهاییت ضرب در این متغیر باشه. حالا یک خط قبل از اینکه قیمت نهایی مقدار دهی بشه بیا اون متغیر اینت رو مقدار دهی کن با عدد انتخاب شده توی اسپینر. (نکتش اینجاست که اگه عددت رند نباشه و خورده باشه باید بجای اینت از دابل استفاده کنی.) (7 سال پیش)
0 0
اومدم عدد اسپینر رو با قیمت ضرب کردم و ریختم تو خود قیمت . این عمل هر بار که اسپینر عددش زیاد میشه تغییر میکنه و adapter.notifyDataSetChanged رو ست می کنم که تغییرات انجام شه. این حل شد و حالا اگه عدد اسپینر کم شه قیمت کم نمیشه چون قیمت داره ضرب میشه . باید تقسیم شه. اینو چطوری چک کنم با if ؟ (7 سال پیش)
0 0
نکته جالبیه. میتونی با هر با کم شدن اسپینر . به اندازه قیمت یک واحد از رقم کلی کم کنی. کدهاش رو میتونی توی دکمه کم کردن عدد اسپینر بنویسی. (7 سال پیش)
پاسخ به سوال 
علی  7 سال پیش
0 0

منظورم اینه داخل این if ها چی بنویسم که وقتی عدد کم یا زیاد میشه تشخیص بده ؟ 

 if(){

  //if count spinner --
  int tempM = item.count;
tempM++; item.totalPrice = item.totalPrice / tempM; }else if ( ) { //if count spinner ++ item.totalPrice = item.count * item.totalPrice; }
0 0
این لینک رو ببین شاید کمکت کنه . (7 سال پیش)
پاسخ به سوال 
Criss  7 سال پیش
+2 0

حالا می خوام مثلا ۲ تا آیتم اومد از سرور بیاد بر اساس تعداد اسپینر جمع کل قیمت رو به من بده .

با روش های مختلفی میشه این کار رو کرد ، مثلا شما میخواید وقتی کاربر داره تعداد هر ایتم روی لیست ویو رو کم و زیاد میکنه قیمت تغییر کنه ؟ و یا بعد از اینکه تعداد مشخص شد و با کلیک کردن روی تایید قیمت محاسبه بشه ؟ قیمت توی یک اکتیوتی دیگه نمایش داده میشه ؟ و یا در یک View بالای لیست ویو و . . .

 اولین چیزی که باید بهش دقت کنید این آرایه هست <

  private ArrayList<StructValues> arrayStructList = new ArrayList<StructValues>();

چون شما میتونید با استفاده از  اون تعداد لیست آیتم های لیست ویو رو بدونید و همچنین مقادیر اولیه هر ایتم که قیمت ها رو به شما میده

یکی از روش های کار میتونه به این شکل باشه که شما یک آرایه از نوع SparseArray بسازید و در adapter مربوط به لیست ویو داشته باشید :

این آرایه بر اساس KEY , VALUE ساخته میشه بنابر این شما میتونید positon هر ایتم از لیست رو بدون اینکه تکراری صورت بگیره درون این آرایه قرار بدید < مقدار position میشه کلید و تعدادی که کاربر برای هر ایتم انتخاب کرده میشه Value که باید از View خودتون getText کنید

این ارایه دوجا باید استفاده بشه یک بار در متد fill < یکبار زمانی که کاربر تعداد رو تغییر میده ، شما این آرایه رو هربار که متد fill صدا زده میشه باید پر کنید و مقدار پیش فرض با توجه به شرایط شما فک میکنم میتونه 0 و یا 1 باشه ، وقتی کاربر تعداد هر لیست رو افزایش یا کاهش میده شما position اون ایتم رو دارید به عنوان KEY بگیرید و تعداد انتخاب شده رو Value در نظر بگیرید و وارد آرایه کنید

fill(){
       SparseArray.add(position,txtValue.gettext().toInteger());

spinetItem.onClickListener(){
SparseArray.add(position,txtValue.gettext().toInteger());
} }

بعد از اتمام کار توسط کاربر با استفاده از یک لیستنر این آرایه رو بفرستید جایی که به آرایه زیر هم دسترسی داشته باشید

   private ArrayList<StructValues> arrayStructList = new ArrayList<StructValues>();

شما توی آرایه بالا قیمت هر ایتم رو دارید و توی آرایه ایی که با استفاده از SparseArray ساخته شده تعداد هر ایتم رو دارید

size هر دو آرایه برابر هست ، بنابر این کافیه index ایتم هارو بگیرید در یک دیگر ضرب کنید و به در هر بار ضرب مقدار رو جمع کنید

arrayStructList;
SparseArray;

float price = 0;

 For(in = 0 to SparseArray.size i++){
price += SparseArray.get(i) * arrayStructList.get(i).price;
}

 

پاسخ به سوال 
علی  7 سال پیش
0 0

criss عزیز ممنون که وقت گذاشتی . من با پایین بالا کردن کد ها اومدم برای عوض شدن تعداد اسپینر  وقتی اسپینر عوض میشه و پاسخ OkUpdateCount میاد اونجا عدد اسپینر رو می گیرم و ضرب قیمت محصول که در سرور تعریف شده می کنم. و میریزم تو قیمت محصول که می خوام نمایش بدم .

الان اسپینر رو هر عددی بدم درست هستش و قیمت نهایی رو میده.

مشکل آخر این میمونه که من TextView که در کلاس لیست ویو هستش رو static کردم و در ادپتر گرفتمش . که می دونم اشتباه هست کارم و بعضی وقت ها نمایش نمیده. همین تیکه رو بایستی چکار کنم؟ view قیمت آیتم ها در بالای لیست ویو نمایش داده میشه. شبیه به دیجی کالا

     //get Items price 
      long pPrice = 0;
      for (int i = 0; i < G.shopping.size(); i++) {

        pPrice += G.shopping.get(i).finalPrice;

      }
      
      //change price in TextView
      String f = Long.toString(pPrice) + CURRENCY;
      ShoppingBag.totalShopping.setText(f);
      
      
      //change item in Spinner
      spinnerCount.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

          Spinner spinner = (Spinner) v;
          item.count = Integer.parseInt(spinner.getSelectedItem().toString());

          spinnerCount.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parentView, View view, int position, final long id) {

              item.count = Integer.parseInt(spinnerCount.getSelectedItem().toString());

              //update counter in Spinner
              pd = ProgressDialog.show(AdapterShoppingBag, null, "لطفا صبر کنید...");
              Thread thread = new Thread(new Runnable() {
                Handler handler = new Handler() {
                  @Override
                  public void handleMessage(Message msg) {
                    pd.dismiss();

                    switch (res) {

                      case "OkUpdateCount":

                       //mohasebe tedad mahsol va gheymat
                        item.totalPrice = item.count * item.totalPrice_server;  // ex: 1000 = 1 * 1000  

                        //mohasebe  tedad mahsol va takhfif 
                        item.discount = item.count * item.discount_server; // ex: 100 = 1 * 100

                        // mohasebe takhfif.
                        item.total = item.totalPrice - item.discount;  // ex: 900 = 1000 - 100

                        // mohasebe arzesh afzodeh.
                        item.vat = item.total * item.vat_server / 100; // ex: 81 = 900 * 9 / 100

                        // mohasebe gheymate nahai.
                        item.finalPrice = item.total * item.vat_server / 100 + item.total; // ex: 981 = 900 * 9 / 100 + 900

                        adapter.notifyDataSetChanged();

                        spinnerCount.setOnItemSelectedListener(null);

                        res = "";

                        break;
                      case "NoUpdateCount":

                        Toast.makeText(G.context, "خطا در بروزرسانی تعداد محصول", Toast.LENGTH_SHORT).show();
res = ""; break; default: Toast.makeText(G.context, "خطا در انجام عملیات", Toast.LENGTH_SHORT).show(); break; } super.handleMessage(msg); } }; @Override public void run() { try { Message msg = new Message(); CartHelper.updateCount(item.id, item.count, G.sp.getString("mobilee", "")); handler.sendMessage(msg); } catch (Exception e) { Log.e("LOG", e.getMessage()); } } }); thread.start(); } @Override public void onNothingSelected(AdapterView<?> parentView) { } }); return false; } });

 

 

0 0
من راهی پیدا نکردم برای این TextView و کسی میتونه کمکم کنه؟؟؟ criss عزیز هم فکر کنم نیست . (7 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .