سلام
من یک لیست دارم شامل ویویی که تشکیل شده از چند المان من میخوام روی هر سطر که انتخاب کردم
عمل سلکت اتفاق بیفته به این شکل که علاوه بر تغییر رنگ سطر مثلا چک باکس اون سطر هم انتخاب بشه
تا اینجا مشکلی نیست وانجام شده ولی یکی از عناصر که تکس ویو است میخوام بتونم مقدارشو تغییر بدم برای اینکار چند راه رفتم:
یکی به جای تکس ویو نوع ادیت تکست رو انتخاب کردم که متاسفانه مانع ازاجرای عمل انتخاب روی لیست شدوفقط اجازه تغییر را میداد
دیگر اینکه به تکست ویو اتریبیوت android:editable="true" دادم باز هم همین اتفاق افتاد علاوه براینکه اینبار ادیت هم نمیشد
اینبار از یک ادیت تکس مخفی استفاده کردم بازهم همون مشکل پیش اومد
شما پیشنهادی برای اینکار دارید ؟
البته من از یک دیالوگ برای دریافت مقدار تکست ویواستفاده کردم ولی ظاهر و یوزرفرندلی بودن برنامه رو خراب کرد
ممنون
سوالمو به شکل دیگه بیان میکنم
اصلا فرق ListView با GridView چیه ؟
تا الان من برای نمایش دیتا از لیست ویو وبرای درج دیتا از گرید ویو استفاده میکردم ولی در اندروید اوضاع متفاوته چون امکانات گرید ویو کمتره !!
مثلا من فوتر برای گرید ویو پیدا نکردم یا مثلا ایونتی مانند OnRowSelected که بشه ردیفی که روش هستیم رو انتخاب کنیم در هر دو OnItemClickListener داریم که در مواقعی که یکی از آیتمها EditView باشه کار نمیکنه
راه حل چیه ؟
من به جای OnItemClickListener از OnClickListener درداخل کلاس آداپتور در متدgetview استفاده کردم منتها در اونجا پوزیشن لیستم را ندارم تا از آن استفاده کنم برای رفرش لیستم
پیشنهادی دارید ؟
اصلا یک کار دیگه میکنم یک ادیت تکس مخفی میذارم و ادیت تکست لیست را همون تکست ویو میکنم ومیگم اگر روش کلیک کردم ادیت باکس مخفی من پیدا بشه در موقعیتی روی همون تکست ویوی من قرار بگیره وپس از مقدار گرفتن روی تکس ویو بشینه ودوباره مخفی بشه
اما اینکار در اندروید شدنیه ؟ابزار حرکت وجود داره یا باید همه از صفر ساخته بشه ؟ چون به نظر میاد برای هر حرکتی باید صفحه مجدد رفرش بشه ؟
عکس ضمیمه را میذارم تا منظورم را بهتر متوجه بشید
[
attachment=287]
همونطور که در عکس پیداست من میخوام مقدار مثلا پنیر را 2 تا کنم
لطفاً کدتون رو بگذارین. پیشنهاد میکنم به Layout اصلی که همه عناصر لیست رو در بر گرفته (لی اوت عناصر لیست منظورمه نه خود لیست ویو)، یه id بدین و برای اون، OnClickListener بنویسید و درصورت تمایل، وقتی روش کلیک میشه، یه Dialog نشون بدین برای ویرایش محتوای عنصر یا یه اکتیویتی جدید یه هر جور دیگه که خودتون صلاح میدونید. توی برگشت هم notifyDatasetChanged رو روی آداپتر صدا بزنید تا لیست ویو آپدیت بشه.
ممنون از وقتی که گذاشتید روش شما رو همونطور که دردو پست قبلی گفتم رفتم من ترجیح میدادم یوزر همونجا روی لیست تغییر بده تا یک دیالوگ باز بشه
کدم رو کمی مرتب میکنم میزارم
بدلیل اینکه برنامه ام از یک اکتیویتی وچندین فرگمت تودر تو تشکیل شده کار آپدیت کردن ها یم کمی مشکل شده چون بیشتر متدها با اکتیوتی کار دارند تا با فرگمنت
نتایجی زو که بدست اوردم برای اطلاع سایر دوستان هم اینجا میزارم
تا بعد
کدی که گفته بودم میذارم البته پوزش بابت تاخیر
با اضافه کردن این متد به کلاس اداپتورم وصدا زدن اون از داخل getView کاری رو که میخواستم تونستم انجام بدم منتها توی امولاتور اکلیپس خیلی خوب کار میکنه اما داخل گوشی اصلا خوش دست نیست باید هنوز روش کار کنم
واما کد
public void setStatusEdit(final ViewHolder holder, View convertView) {
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (holder.checked_list.isChecked()) {
holder.many_et.setText("0.0");
holder.checked_list.setChecked(false);
} else {
holder.many_et.setText("1.0");
}
}
});
holder.many_et.addTextChangedListener(new TextWatcher() {
private Double many_old = 0.0;
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
try {
if (!holder.checked_list.isChecked())
holder.checked_list.setChecked(true);
if (Double.valueOf(s.toString()) == 0) {
holder.checked_list.setChecked(false);
}
holder.item.setMany(Double.valueOf(holder.many_et.getText()
.toString()));
sum_buy += ((Double.valueOf(holder.many_et.getText()
.toString()) - many_old) * Double
.valueOf(holder.price.getText().toString()));
tvf1.setText(footerText+ String.valueOf(sum_buy));
} catch (NumberFormatException e) {
Log.e(TAG, "error onTextChanged: " + s.toString());
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
this.many_old = Double.valueOf(holder.many_et.getText()
.toString());
}
@Override
public void afterTextChanged(Editable s) {
}
});
}