درسته. ولی من boolean fav = false; رو برای این گذاشتم چون اگه زیر تعریف ImageView میزاشتمش باید به final تبدیلش میکردم و بعدش نمیتونستم اون رو برعکس کنم.
با این کدی که شما نوشتید تعریف متغیر fav کجا انجام میشه؟
بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ
تغییر عکس با هر کلیک (حل شد)
مدیریت گفتگو
آخرین تغییر: 11 سال پیش
سلام دوستان.
من این کد رو نوشتم برای تغییر عکس با هر بار کلیک روی عکس. اما فقط دفعه ی اول کار میکنه. علت چیه؟
final ImageView img = (ImageView) findViewById(R.id.img);
img.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
boolean fav = false;
if ( !fav) {
img.setImageResource(R.drawable.icon1);
}
else {
img.setImageResource(R.drawable.icon2);
}
fav = !fav;
}
});
پاسخها 2
شما همواره بعد کلیک دارید fav رو false میکنی درصورتی که باید fav رو برعکس کنی:
final ImageView img = (ImageView) findViewById(R.id.img);
img.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
fav = !fav;
if ( !fav) {
img.setImageResource(R.drawable.icon1);
}
else {
img.setImageResource(R.drawable.icon2);
}
}
});
نظرات
اونو به صورت یه فیلد بعد از تعریف کلاس بذارید
ببخشید با توجه به اینکه خیلی پراکنده دارم آموزش ها رو یاد میگیرم فراموش کردم فیلد رو چطوری تعریف میکردیم؟!
ممکنه اینم بگید؟ (معذرت بابت ابتدایی بودن سوالام)
دوست عزیز منظور از فیلد متغیر سراسری هستش مثلا همون متغیر رو در داخل کلاس اصلی در بالای تمام متدها تعریف کن و در همه جا استفاده کن.
بعد از تعیف کلاستون بنویسید public boolean fav; اینجوری فیلدی درست میکنید ک در تمام توابع کلاستون میتونین ازش استفاده کنین!البته به جای public از private هم میتونین استفاده کنین (اگر فقط از این متغیر توی همین کلاس استفاده میشه)
اطلاعات کامل راجع به این موضوع هم توی اموزش 04-01 Object Oriented Programming میتونین ببینین!
مثلا من نمونه سورسی رو از پروژه های استاد رو میزارم متغیرهای circlePaint و percent بصورت فیلد یا سراسری تعریف شده اند که رنگ بنفش میگیرند :
public class CustomProgress extends ImageView {
public Paint circlePaint;
public Paint textPaint;
public static final int STROKE_WIDTH = 6;
public int percent = 100;
public CustomProgress(Context context) {
super(context);
initialize(context);
}
public CustomProgress(Context context, AttributeSet attrs) {
super(context, attrs);
initialize(context);
}
نظرات
هر چهار تا که بالای constructorها تعریف شدند فیلد هستند تو محیط اکلیپس من بنفش هستند اما اینجا سفید دیده میشه!
حل شد . ممنونم به شدت
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .
ویرایش
پیام
نظرات