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

نمایش دیالوگ بنا به نظر کاربر ( حل شد )

RojaDev  11 سال پیش  11 سال پیش
+1 0

سلام مجدد

چطوری میتونم کاری کنم که یه دیالوگ فقط یکبار نشون داده بشه؟

( وقتی اکتیوتی که مد نظر هست اومد بالا این پیغام نشون داده بشه یه گزینه هم داشته باشه که اگر کاربر نخواست در دفعات بعد نشون داده نشه...نکته مبهمش فقط این هست چطوری در خودش ذخیره کنه که کاربر تیک گزینه رو زده یا نه؟!)

+5 0
از SharedPrefernce می تونید استفاده کنید. یه SharedPrefernce از جنس boolean می سازید و مقداره اولیه رو true میزارید و شرط می زارید که تا زمانیکه true بود پیغام نمایش داده شه. وقتی هم که کاربر تیک رو زد مقدار SharedPrefernce رو false می کنید (11 سال پیش)
+2 0
خیلی ساده میتونید از SharedPreferences استفاده کنید. وقتی چک باکس تیک خورد یه مقدار مثلا boolean توی SharedPreferences ذخیره بشه و هر وقت اومدی توی Activity اگه اون مقدار true بود دیالوگ رو نشون بدی در غیر این صورت نشون ندید. (11 سال پیش)
+1 0
این SharedPreferences چیه؟ کلن آشنا نیستم باهاش...:| تو ویدیو های استاد میشه لطفا بگین کدوم بخشه؟! (11 سال پیش)
+1 0
بخش 17 قسمت 1 (11 سال پیش)
 برای این سوال 9 پاسخ وجود دارد.
پاسخ به سوال 
Hossein Kurd  11 سال پیش
+3 0

در واقع SharePreferences خیلی آسونه ، من چند روز پیش برای اولین بار ازش استفاده کردم ، 17-01 Using Preferences از 0037:00 به بعد رو با دقت نگاه کنید چون آموزش کار با SharedPereferences رو به صورت کد نویسی توضیح می ده

همچنین شما نیازی به Create کردن اون ندارید و با متد putBoolean می تونید مقدارتون رو دخیره کنید و دفعه بعد فراخوانی کنید

blnRunner = true;
SharedPreferences preferences;
preferences = PreferenceManager.getDefaultSharedPreferences(context);
boolean blnFuture = G.appPreferences.preferences.getBoolean("RUN_ME", blnRunner);
if(
blnFuture){
// Call Method
}

در اینجا blnRunner مقدار پیشفرض هست که اگر پیش از این پیزی ثبت نشده ، به ما بازگردانده می شه و "RUN_ME" نام کلید شما

حالا برای ثبت تغییرات وقتی کاربر Button یا چکباکس رو تاچ کرد این رو بزنید:


SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean("RUN_ME", blnRunner);
editor.commit();

البته با رعایت OOP خیلی زیباتر هم می شه نوشت که به دلیل پیچیده شدن فعلا همین رو می نویسم

0 0
ممنون ، آموزش استاد رو دیدم...به کل گیج شدم :|...چه تو آموزش استادو چه آموزش های سطح نت...صفحه تنظمیات یه صفحه جداست...اما چیزی که میخوام بنویسم فقط یه دیالوگه که توی اکتیویتی اصلی قرار بیاد...همون جا true و false بشه...با استفاده از دستوراتی که گذاشتین یه پروژه سمپل ایجاد کردم اما خطا میده...کد هاشو توی پاسخ پایین میزارم..منون میشم راهنماییم کنید... (11 سال پیش)
0 0
اگر آموزش استاد رو تا آخر ببینید متوجه می شید. (11 سال پیش)
0 0
من هم اولش گیج شدم اما همون عصر که این پست رو گذاشتم مجدد توی پروژ ازش استفاده کردم، تا پیاده سازیش نکنی نمی تونی بهش مسلط بشی (11 سال پیش)
0 0
@Hoseein.Kurd: موقع کلیک کردن چک باکس مقدار این متغیر رو blnRunner رو false کردم...اما اینکار هیجا ذخیره نمیشه؟! و دوباره بعد از اجرا میاد؟! شما این مشکلو نداشتی؟! (11 سال پیش)
0 0
blnRunner در واقع مقدار ثابت و اولیه ای هست که می تونید مستقیما true رو جایگزینش کنید ، متغیر مهم blnFuture هست ، لطفا در هر بار اجرا مقدار این دو متغیر رو توی LogCat نمایش بدید تا متوجه بشید (11 سال پیش)
پاسخ به سوال 
RojaDev  11 سال پیش
0 0

appPreferences رو نمیشناسه!

     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final boolean blnRunner;

        blnRunner = true;
        final SharedPreferences preferences;
        preferences = PreferenceManager.getDefaultSharedPreferences(this);
        boolean blnFuture = this.appPreferences.preferences.getBoolean("RUN_ME", blnRunner);
        if (blnFuture) {
            final Dialog d = new Dialog(StartupActivity.this);
            d.requestWindowFeature(Window.FEATURE_NO_TITLE);
            d.setContentView(R.layout.help);
            d.show();
        }
        
        CheckBox ck =(CheckBox) findViewById(R.id.checkBox1);
        ck.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View arg0) {
                SharedPreferences.Editor editor = preferences.edit();
                editor.putBoolean("RUN_ME", blnRunner);                
            }
        });

    }
+1 0
به this.appPreferences نیازی نیست، برش داری درست میشه (11 سال پیش)
0 0
بله...:) مگه کلیک کردن روی چک باکس با >> ck.setOnClickListener(new OnClickListener() { (11 سال پیش)
0 0
حتما میخوای با چک باکس باشه؟ روش دیگه معرفی کنم اشکالی نداره؟ (11 سال پیش)
0 0
نه مشکلی نیست...فقط میخوام موقع استارت اکتیوتی یه چیزی مث هلپ بیاد که کاربر خواست دیگه نیاد...! (11 سال پیش)
+1 0
این خطم بش اضافه کن editor.commit(); (11 سال پیش)
0 0
بعد از editor.putBoolean("RUN_ME", blnRunner); (11 سال پیش)
0 0
چک باکس مال اکتویتیه اصلییه یا مربوطه به دیالوگ نمایش داده شده؟ (11 سال پیش)
0 0
ممنون...گذاشتم...اون خطی که گفتم همچنان ارور میده !! :\ لینک (11 سال پیش)
0 0
واسه لایوت دیالوگه که داره نمایش میده... >> layout.help (11 سال پیش)
0 0
چون طولانیه توی یک پاسخ جداگونه جوابو مینویسم (11 سال پیش)
0 0
مرسی خیلی زیاد... (11 سال پیش)
+1 0
من متغیر preference رو در کلاس AppPreference تعیین کردم نیازی نیست شما از AppPreference استفاده کنید (11 سال پیش)
0 0
بله...برش داشتم از پروژه... (11 سال پیش)
پاسخ به سوال 
miladint  11 سال پیش
+2 0

خدمت شما

 readPreference();
        //Dialog Starts
        if ( !isDialogDismiss) {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage("پیغام مورد نظر")
                    .setCancelable(false)
                    .setPositiveButton("رد کردن", new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int id) {
                            isDialogDismiss = true;
                            writePreference();
                            dialog.cancel();
                        }

						private void writePreference() {
							// TODO Auto-generated method stub
							
						}
                    })
                    .setNegativeButton("قبول", new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int id) {
                            dialog.cancel();
                        }
                    });
            AlertDialog alert = builder.create();
            alert.setTitle("توجه");
            alert.show();

        }
        //Dialog Ends
0 0
این هر دفعه میاد یکم فکر کنین و ببینین چجوری میشه فقط یه بار نمایش داده بشه :) موفق باشی (11 سال پیش)
0 0
این جور راهنمایی های چلنج پذیر رو دوست میداریم :دی مرسی... بررسیش میکنم... (11 سال پیش)
0 0
یه سوال فنی فقط...تابع readPreference(); تعریف میشه؟! نمیشه؟! (11 سال پیش)
0 0
isDialogDismiss این رو هم نمیشناسه؟! :\ (11 سال پیش)
+1 0
همه رو create کن همه رو میشناسه تست کردم و فرستادم برات (11 سال پیش)
0 0
الانه اکلیپسم هنگ کنه... جفت کد هارو باهم دارم تست میکنم... ممنون (11 سال پیش)
+1 0
الانه اکلیپسم هنگ کنه... جفت کد هارو باهم دارم تست میکنم... ممنون (11 سال پیش)
پاسخ به سوال 
محسن  11 سال پیش
+2 0

نباس چک باکس رو اونطوری تعریف کرد، چون مربروط به دیالوگ هست باید همونجا تعریف بشه واسه همینم nullpointerException میده (احتمال زیاد)

چک باکس رو اینطوری تعریف کن بعد براش کلیک لیسنر تعریف کن:

 CheckBox ck =(CheckBox) d.findViewById(R.id.checkBox1);
+1 0
:\ بی دقتم...:\ ممنون حل شد... اما حالا کلن چه تیک باشه چه نباشه دیالوگ میاد :))))) (11 سال پیش)
+1 0
onClickListener نباید استفاده بشه، باید از onCheckedChangeListener استفاده بشه! (11 سال پیش)
پاسخ به سوال 
Hajhosseini  11 سال پیش
+3 0

از onCheckedChangeListener استفاده کن نه از onClickListener

  chechBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            
            @Override
            public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
                
            }
        });

اولین کدی که استفاده میکنی کدی هست که آقای حسین کرد در اولین پاسخ گفتن : 

 blnRunner =true;
SharedPreferences preferences;
preferences =PreferenceManager.getDefaultSharedPreferences(context);
boolean blnFuture = G.appPreferences.preferences.getBoolean("RUN_ME", blnRunner);
if(
blnFuture){
// Call Method
}

توی if بالا لیستنر رو تعریف کن،درصورتی که متغیرت True بود دیالوگ باکس باز میشه، توی لیستنر باید کد تغییر متغیرت توی SharedPreferences رو بدی  

پاسخ به سوال 
RojaDev  11 سال پیش
0 0

مجددا ویرایش : :|

نخیر!!! :| همچنان کار نمیکنه... الان دیگه فقط یه بار اجرا میشه!!!! چه تیک بخوره ...چه تیک نخوره!!!!

این هم کد :

     boolean blnRunner = true;


    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final Dialog dd = new Dialog(StartupActivity.this);
        final SharedPreferences preferences;
        preferences = PreferenceManager.getDefaultSharedPreferences(this);
        boolean blnFuture = preferences.getBoolean("RUN_ME", blnRunner);
        if (blnFuture) {
            dd.requestWindowFeature(Window.FEATURE_NO_TITLE);
            dd.setContentView(R.layout.help);
            dd.show();
            CheckBox ck = (CheckBox) dd.findViewById(R.id.checkBox1);
            ck.setOnCheckedChangeListener(new OnCheckedChangeListener() {

                @Override
                public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
                    SharedPreferences.Editor editor = preferences.edit();
                    blnRunner = false;
                    editor.putBoolean("RUN_ME", blnRunner);
                    editor.commit();
                }
            });
            Button btn = (Button) dd.findViewById(R.id.button1);
            btn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    dd.dismiss();
                }
            });
        }
    }
0 0
!!!!! (11 سال پیش)
پاسخ به سوال 
Hajhosseini  11 سال پیش
+2 0

تمیز شده کدتون!

    public Dialog dialog;    
    public SharedPreferences preferences;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        dialog = new Dialog(StartupActivity.this);

        preferences = PreferenceManager.getDefaultSharedPreferences(this);
        boolean blnFuture = preferences.getBoolean("RUN_ME", false);
        if (!blnFuture) {
           dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
            dialog.setContentView(R.layout.help);
            dialog.show();
            CheckBox checkBox = (CheckBox) dialog.findViewById(R.id.checkBox1);
            checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
                    SharedPreferences.Editor editor = preferences.edit();
                    editor.putBoolean("RUN_ME", true);
                    editor.commit();
                }
            });
            Button btnClose = (Button) dialog.findViewById(R.id.button1);
            btnClose.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    dialog.dismiss();
                }
            });
        }
    }
0 0
کاملا درست...دیشب اینو جایگزین کد های خودم کردم و. بدون مشکل کار کرد...میشه لطفا خطای و اشتباه کد من رو بگین؟! (11 سال پیش)
+1 0
چند روزی نبودم، حقیقتش من این کد رو توی اکلیپس ننوشتم، فقط همینجا کدتون رو دیدم و تمیزش کردم. (11 سال پیش)
پاسخ به سوال 
Hossein Kurd  11 سال پیش
+1 0

می دونی اشتباه شما چیه ؟ اینه که سعی می کنی کد اصلی رو همون اول پیاده کنی

ابتدا از کارکرد SharedPReferences اطمینان پیدا کن بعد توی کد اصلی پیادش کن

ایتدا یه سمپل بساز تا مقادیر رو در SharedPreference دخیره کنه سپس اون رو له کد اصلی انتقال بده

+1 0
مرسی از راهنماییتون :) چشم... (11 سال پیش)
پاسخ به سوال 
sadra  11 سال پیش
+1 0

سلام. آموزشش رو بنده قبلا دادم. دقیقا فکر کنم شما هم برای همین مورد بخوایید، یه نگاه به این بندازید بد نیست:

 آموزش ساخت دیالوگِ "به من رای میدی؟" در هنگام خروج از اپلیکیشن

 

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