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

تغییر عکس با هر کلیک (حل شد)

مدیریت گفتگو
بانوی شرقی 11 سال پیش
آخرین تغییر: 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;

            }

        });

نظرات

Hossein Kurd 11 سال پیش
خوبه که مشکل حل شد، اما یک توصیه: پیش از انجام کدنویسی ابتدا به صوررت شفاهی برای خودتون مطرح کنید چکار می خواهید انجام بدید
Hossein Kurd 11 سال پیش
خوبه که مشکل حل شد، اما یک توصیه: پیش از انجام کدنویسی ابتدا به صوررت شفاهی برای خودتون مطرح کنید چکار می خواهید انجام بدید

پاسخ‌ها 2

sadeghbarout 11 سال پیش

شما همواره بعد کلیک دارید 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);
                }
                

            }

        });

نظرات

بانوی شرقی 11 سال پیش
درسته. ولی من boolean fav = false; رو برای این گذاشتم چون اگه زیر تعریف ImageView میزاشتمش باید به final تبدیلش میکردم و بعدش نمیتونستم اون رو برعکس کنم. با این کدی که شما نوشتید تعریف متغیر fav کجا انجام میشه؟
sadeghbarout 11 سال پیش
اونو به صورت یه فیلد بعد از تعریف کلاس بذارید
بانوی شرقی 11 سال پیش
ببخشید با توجه به اینکه خیلی پراکنده دارم آموزش ها رو یاد میگیرم فراموش کردم فیلد رو چطوری تعریف میکردیم؟! ممکنه اینم بگید؟ (معذرت بابت ابتدایی بودن سوالام)
Eminent 11 سال پیش
دوست عزیز منظور از فیلد متغیر سراسری هستش مثلا همون متغیر رو در داخل کلاس اصلی در بالای تمام متدها تعریف کن و در همه جا استفاده کن.
Andronymous 11 سال پیش
بعد از تعیف کلاستون بنویسید public boolean fav; اینجوری فیلدی درست میکنید ک در تمام توابع کلاستون میتونین ازش استفاده کنین!البته به جای public از private هم میتونین استفاده کنین (اگر فقط از این متغیر توی همین کلاس استفاده میشه) اطلاعات کامل راجع به این موضوع هم توی اموزش 04-01 Object Oriented Programming میتونین ببینین!
Eminent 11 سال پیش

مثلا من نمونه سورسی رو از پروژه های استاد رو میزارم متغیرهای 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);

    }

نظرات

Eminent 11 سال پیش
هر چهار تا که بالای constructorها تعریف شدند فیلد هستند تو محیط اکلیپس من بنفش هستند اما اینجا سفید دیده میشه!

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