نمایش دیالوگ بنا به نظر کاربر ( حل شد )
سلام مجدد
چطوری میتونم کاری کنم که یه دیالوگ فقط یکبار نشون داده بشه؟
( وقتی اکتیوتی که مد نظر هست اومد بالا این پیغام نشون داده بشه یه گزینه هم داشته باشه که اگر کاربر نخواست در دفعات بعد نشون داده نشه...نکته مبهمش فقط این هست چطوری در خودش ذخیره کنه که کاربر تیک گزینه رو زده یا نه؟!)
در واقع 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 خیلی زیباتر هم می شه نوشت که به دلیل پیچیده شدن فعلا همین رو می نویسم
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);
}
});
}
خدمت شما
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
نباس چک باکس رو اونطوری تعریف کرد، چون مربروط به دیالوگ هست باید همونجا تعریف بشه واسه همینم nullpointerException میده (احتمال زیاد)
چک باکس رو اینطوری تعریف کن بعد براش کلیک لیسنر تعریف کن:
CheckBox ck =(CheckBox) d.findViewById(R.id.checkBox1);
از 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 رو بدی
مجددا ویرایش : :|
نخیر!!! :| همچنان کار نمیکنه... الان دیگه فقط یه بار اجرا میشه!!!! چه تیک بخوره ...چه تیک نخوره!!!!
این هم کد :
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();
}
});
}
}
تمیز شده کدتون!
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();
}
});
}
}
می دونی اشتباه شما چیه ؟ اینه که سعی می کنی کد اصلی رو همون اول پیاده کنی
ابتدا از کارکرد SharedPReferences اطمینان پیدا کن بعد توی کد اصلی پیادش کن
ایتدا یه سمپل بساز تا مقادیر رو در SharedPreference دخیره کنه سپس اون رو له کد اصلی انتقال بده
سلام. آموزشش رو بنده قبلا دادم. دقیقا فکر کنم شما هم برای همین مورد بخوایید، یه نگاه به این بندازید بد نیست:
آموزش ساخت دیالوگِ "به من رای میدی؟" در هنگام خروج از اپلیکیشن
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .