بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

محاسبه مبلغ در لیست ویو (حل شد)

مدیریت گفتگو
علی 11 سال پیش
آخرین تغییر: 11 سال پیش

سلام:

من در لیست ویو که از سرور می خونه تعدادی قیمت دارم . حالا قیمت ها رو چطوری از لیست ویو بگیرم که می خوام جمع کنم با هم؟ 

نظرات

احسان منصوری 11 سال پیش
می خواید قیمت هایی که توی آیتم های لیست ویو هست رو با هم جمع کنید؟
علی 11 سال پیش
آره احسان جان . فقط نمی دونم چطور این ایتم ها رو بگیرم.
احسان منصوری 11 سال پیش
خب یه for بنویس که به اندازه آرایت اجرا بشه. هر بار که حلقه اجرا میشه، قیمت رو بریز توی یه متغیر کمکی. بار دوم، قیمت بعدی رو با قیمت قبلی که توی متغیر کمکی هستش جمع بزن. به همین راحتی
علی 11 سال پیش
نمیشه تو readData همین کار رو کرد؟ من نفهمیدم اولش رو . هر بار که حلقه اجرا میشه قیمت رو بریز.... این نگرفتم دقیقا کدوم رو میگی
Criss 11 سال پیش
اطلاعات رو بصورت json دریافت میکنید ؟ آرایه شما به چه صورت هست ؟ کلاس مربوط به ذخیره اطلاعات شما (توی آموزش های استاد اسم این کلاس Node هست )شما به چه صورت هست ؟ قرار هست که چه تعداد از لیست ویو ها رو با هم جمع بزنید ؟ همه ی اونها جمع می شوند ؟ و یا تعداد خاصی که باید تیک زده بشوند ؟
علی 11 سال پیش
Criss جان Ali زحمت کشید در آخر این صفحه جواب درست رو گفت و مشکل حل شد . ممنون از تو که اومدی .

پاسخ‌ها 6

علی 11 سال پیش

این الان غلطه ولی نمیدونم چطوری درسته ! :(

 
String result = Webservice.readUrl(url, params);
	        if (result != null) {
	            try {
	               G.account.clear();
	                JSONArray tasks = new JSONArray(result);
	                for (int i = 0; i < tasks.length(); i++) {
	                    JSONObject object = tasks.getJSONObject(i);
	                    StructCooperationAccount task = new StructCooperationAccount();
	                    task.Row = object.getString("Row");
	                    task.Desc = object.getString("Desc");
	                    task.Pay = object.getInt("Pay");
	                   
	                    if(object !=  null){
	                    	
	                    	int F = task.Pay;
	                    	int Sum = F + task.Pay;
	                    	 Log.i("LOG", " Sum : " +  Sum);
	                    }
	                    
	                    G.account.add(task);

نظرات

Vahid 11 سال پیش
تعریف متغیر sum رو ببر قبل از readUrl . اینجوری که شما نوشتی هر بار که یک json می خونی یک متغییر Sum جدید ایجاد می شه و مقدار قبلی که داخلش ریختی صفر میشه.
علی 11 سال پیش
iebu جان انجام دادم ولی مثلا اگه دو تا قیمت اومده باشه تو لیست ویو میره اخری رو جمع می کنه . یعنی 22 رو می کنه 44
Vahid 11 سال پیش
متغییر sum رو فیلد تعریف کنید فکر می کنم مشکلتون حل می شه.
احسان منصوری 11 سال پیش
اینی که نوشتی درسته. متغیر های F و sum رو قبل از for انجام بده که به قول دوستمون هر بار که for اجرا میشه، متغیر ها خالی نشه
علی 11 سال پیش
احسان جان بازم نشد. ببین الان 2 تا قیمت اومده تو لیست ویو . در ردیف اول 1 تومان در ردیف دوم 22 تومان حالا وقتی نمایش میده : 44 یعنی ردیف دوم رو امده 2 ها رو جمعه کرده. من اینو نمی خوام !!!
احسان منصوری 11 سال پیش
یعنی جیسونی که دریافت میکنی، دوتا Object داره؟ مطمئنی از سمت سرور عدد دریافت میکنی؟
علی 11 سال پیش
ببین عکس رو این الان لیت ویو هستش. فقط ردیف دو رو در نظر میگیره و 22 میشه 44
علی 11 سال پیش

نظرات

Vahid 11 سال پیش
log بگیر ببین چرا دو بار جمع می زنه؟ طول آرایه رو LOG بگیر.
علی 11 سال پیش
iebu جان دقیقا تو این کدها کدو رو log بگیرم؟
علی 11 سال پیش
الان نمیدونم چرا هر لاگی می گیرم دوبار چاپ میشه !
Vahid 11 سال پیش
شاید 2 بار read url رو فراخوانی می کنی. یعنی از دو قسمت مختلف.
علی 11 سال پیش
نه این کار رو نکردم . الان مشکل جمع کردن چرا حل نمیشه ؟ یعنی task.pay میاد یه ردیف رو می خونه؟
Vahid 11 سال پیش
از readUrl و asks.length و حلقه For و Log بگیر . اشکال مشخص می شه.
احسان منصوری 11 سال پیش
منظور دوستمون اینه که توی قسمت های مختلف کدت لاگ بگیر ببین این task.pay دقیقا چی چاپ میکنه و چند بار چاپ میشه. توی for لاگ بگیر
علی 11 سال پیش

خوب وقتی از task.pay لاگ می گیرم نتیجه میشه این .

 Log.i("LOG", " Pay : " + task.Pay);

Pay : 1
Pay : 22

نظرات

Vahid 11 سال پیش
اگه یکبار میاره درسته بفیه رو هم بگیر.
علی 11 سال پیش
بقیه رو هم گرفتم مثل همین لاگ میاره ولی جمع اعداد درست نیست.
علی 11 سال پیش
البته توجه داشته باشید که اینها آرایه هستند نه معمولی
Vahid 11 سال پیش
چرا ایتم های adapter رو جمع نمی زنی؟ G.accounts منظورمه.
علی 11 سال پیش
چه فرقی می کنه ؟ در کل باید هر چند تا آرایه هست با هم جمع زده بشه. من مشکلم اینه نمیدونم آرایه های اینجا چطور جمع زده میشه .
Ali 11 سال پیش

سلام
بعد از اینکه G.account از سمت سرور تغذیه شد این 5خط کد رو اجرا کن:

int sum = 0;
for(StructCooperationAccount struct : G.account){
sum = sum + struct.Pay;
}
Log.i("LOG", " Sum : " + sum);

نظرات

علی 11 سال پیش
Ali جان ایول داری مرسی درست شد . ممنون
Ali 11 سال پیش
خواهش میکنم.
علی 11 سال پیش
Ali من اگه بخوام این sum رو جای دیگه استفاده کنم جمع اشتباه میشه. چکار کنم؟
Ali 11 سال پیش
یعنی چی؟ میشه بیشتر توضیح بدی؟
علی 11 سال پیش
کلا حل شد ممنون علی جان و بقیه دوستان .
SaeiD-as 11 سال پیش

با راهنمایی @Ali قسمتی از کارم حل شد، من در برنامم تعداد رو هم میگیرم، میخوام زمانی که تعداد تغییر کرد بلافاصله قیمت کل هم تغییر کنه، اما فقط زمانی که یبار اکتیویتی حاضر رو میبندم و باز میکنم قیمت کل تغییر میکنه

تعداد رو داخل آداپتر تنظیم کردم و قیمت کل رو بعد از خواندن اطلاعات، ممنون میشم راهنماییم کنین

ویرایش

در متد fill داخل آداپتر تعداد رو بوسیله Button کم و زیاد میکنم:(فقط دکمه اضافه کردن رو قرار دادم، کم کردن هم مانند همینه)

 btnFactorPlus.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    requestNumber++;

                    params.clear();
                    params.add(new BasicNameValuePair("request_name", "" + G.preferences.getLong("RECIEVED_ID", 1024)));
                    params.add(new BasicNameValuePair("request_brand", "" + item.id));
                    params.add(new BasicNameValuePair("request_number", "" + requestNumber));
                    Webservice.readUrl("http://192.168.56.1/web/?action=request", params);

                    txtFactorNumber.setText("" + requestNumber);
                }
            });

در تابع اصلی هم تعریف کردم:

 ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("user_id", "" + G.preferences.getLong("RECIEVED_ID", 1024)));

        sendData(params);

        int sum = 0;
        for (StructBazarche struct: requests) {
            sum += (struct.price * struct.number);
        }
        TextView txtFactorTotal = (TextView) findViewById(R.id.txtFactorTotal);      <--در اینجا قیمت کل نشون داده شده
        txtFactorTotal.setText("" + sum);

 

نظرات

Vahid 11 سال پیش
بعد از تغییر تعداد ListView رو آپدیت می کنی؟
SaeiD-as 11 سال پیش
منظورتون استفاده از دستور notifydatasetchange هست؟ نه، چطوری و کجا ازش استفاده کنم؟ داخل آداپتر یا اکتیویتی؟
Vahid 11 سال پیش
نمی دونم تعداد رو کاربر چجوری وارد می کنه. اما اگه با EditText مقدار رو می گرید می تونید در رویداد تغییر متن کنترل Adapter رو آپدیت کنید.
SaeiD-as 11 سال پیش
من دوتا Button قرار دادم که یکیش تعداد رو اضافه میکنه و یکیش تعداد رو کم میکنه، Button ها رو داخل آداپتر تنظیم کردم، اما جمع کل رو داخل اکتیویتی طبق راهنمایی @ali حالا زمانی که روی یکی از Buttonها کلیک میشه باید داخل اکتیویتی بگم یبار دیگه جمع ها رو محاسبه کن که راه حلشو نمیدونم!
Vahid 11 سال پیش
چیزی که الان به ذهنم می رسه اینه که textView مربوط به جمع رو در اکتیویتی به صورت Static تعریف کنید و بعد از کلیک دکمه افزایش یا کاهش در متد fill مربوط به adapter، مقدار مجموع جدید رو هم با متد setText برای TextView اکتیویتی مقدار دهی کنید.
SaeiD-as 11 سال پیش
مرسی @vahid جان مشکلم فکر کنم با همین روش شما داخل لینک زیر حل شد
SaeiD-as 11 سال پیش

نظرات


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