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

اضافه و کم کردن مقدار به آرایه

SaeiD-as  10 سال پیش  10 سال پیش
0 0

سلام دوستان

یک لیست ویو دارم که داخل آداپترش چنتا دکمه برای کم و زیاد کردن محصول قرار دادم، میخوام زمانی که روی دکمه زیاد کردن زده شد داخل آرایه ام اگه مقداری براش بود مقدارشو تغییر بده و اگه هیچ مقداری براش داخل آرایه نبود یکی براش بسازه، هنگامی هم که روی دکمه کم کردن زده شد مقدار رو از آرایه بگیره و کمش کنه تا جایی که به صفر رسید اون مقدار رو از آرایه حذف کنه، یه Structure براش نوشتم که id، name، number رو داخلش قرار میدم، داخل متد fill آداپتر چطوری باید داخل onClick دکمه ها این آرایه رو تعریف کنم؟ خودم داخل کلاس G یه آرایه ساختم اما مقادیر اشتباهی ساخته میشن و درست نمیشن!، ممنون میشم راهنمایی کنید

0 0
دوستان اگه چیزیش مبهمه بگید تا توضیح بدم، کدهای خودم رو قرار ندادم تا اگه روشی بنظرتون میرسه رو امتحان کنم شاید جواب داد، اما اگه لازمه تا کدهایی که زدم رو بنویسم تا روی اونا بررسی کنیم (10 سال پیش)
0 0
با قراردادن سورس کد بهتر میشه شما رو راهنمایی کرد ! (10 سال پیش)
 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
SaeiD-as  10 سال پیش
0 0

کدهای زیر رو در متد fill آداپترم نوشتم:

این کدیه که برای onClick دکمه زیاد کردن قرار دادم:

 if (numberSell == 0) {
                            StructB rs = new StructB();
                            rs.name = item.name;
                            rs.id = item.id;
                            rs.number = item.number + 1;

                            G.rs.add(rs);
                        } else {
                            for (StructB struct: G.rs) {
                                if (struct.id == item.id) {
                                    G.rs.get(G.rs.indexOf(struct)).number = (numberSell + 1);
                                }
                            }
                        }
                        number = Integer.parseInt(txtCount.getText().toString()) + 1;
                        txtCount.setText("" + number);

                        numberSell = Integer.parseInt(txtNumberSell.getText().toString()) + 1;
                        txtNumberSell.setText("" + numberSell);
}

در کدهای بالا گفتم که اگه تعدادی که setText شده صفر بود یعنی مقداری به آرایه وارد نشده، پس یکی بساز و به آرایه اضافه کن، در غیر اینصورت id اونو پیدا کن در آرایه و تعدادش رو یکی زیاد کن

مشکلی که دارم اینه که هنگامی که روی آیتم های مختلف برای تست کلیک میکنم تعداد یه آیتم دیگه رو زیاد می کنه یا اصلا زیاد نمیکنه

+1 0
فکر می کنم G.rs.indexOf(struct) مشکل داشته باشه. چون تابع IndexOf بعضی مواقع خروجی اشتباه داره. برنامه رو دیباگ کن ببین عددی که بر می گردونه درسته؟ (10 سال پیش)
0 0
دقیقا مشکل منم همینه که عدد اشتباه برمیگردونه! بنظرت راه حلش چیه؟ (10 سال پیش)
پاسخ به سوال 
یحیی  10 سال پیش
+1 0

احتمالا باید دنبال چیزی شبیه این باشی. در واقع بهتره که از خود item یک شی بسازی و بعد مقدار دلخواه‌ت رو عوض کنی و بعد داخل همون position که هستی add کنی و بعد برای عدم وجود عنصر تکراری خود postion رو حذف کنی از آرایه، کدش چیزی شبیه زیر میشه. بعدش باید adapter رو notifyDataSetChanged کنی.

 StructB rs =item;
         rs.number ++;
 G.rs.add(position, rs);
G.rs.remove(position);
0 0
مرسی از راهنماییتون، ببخشید متوجه نشدم، میتونید داخل کدی که نوشتم این تغییرات رو بدید؟ خود من برای حذف داخل دکمه کم کردن گفتم اگه مقدارت صفر شد عنصر رو از آرایه حذف کن، الآن با توضیح شما کجا باید حذف رو انجام بدم؟ (10 سال پیش)
+1 0
در واقع ی object از item میسازی و که مقدار نمایشی از سطر فعلی لیست هست. بعد مقادار number رو از این objectای که ساختی افزایش میدی و در مکان position از آرایه‌ت قرارش میدی، بعد مقدار قبلی که در این مکان وجود داره رو جذف میکنی. اگر قصد جایگزین کردن نداری و می‌خوای با شرطی که قرار داری جذف بشه نیزا نیست ۳ خط اول رو بنویسی و فقط خط آخر که حذف کردن آیتم هست رو بنویس. (10 سال پیش)
پاسخ به سوال 
Vahid  10 سال پیش
+1 0

کافیه دستور FOR رو به صورت زیر تغییر دهید:

 for(int i=0 ; i<G.rs.size() ; i++){
if(G.rs.get(i).id == item.id){ G.rs.get(i).number =(numberSell +1);
}

}

در واقع بجای fro each از for ساده استفاده کنید.


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