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

اعمال نشدن تنظیمات بعد از برگشت به صفحه متن (حل شد)

MILAD-MB  11 سال پیش  11 سال پیش
0 0

سلام. بنده یک اکتیویتی تنظیمات دارم که از اسلایدینگ منو وارد آن میشم. وقتی که تمام تنظیمات مثل تغییر فونت و سایز و غیره رو انجام میدم و دکمه Back رو میزنم مستقیم به صفحه متن میره و تنظیمات اعمال نمیشه و حتما باید به صفحه قبل برم و دوباره برگردم تا تنظیمات اعمال بشه. از متد onBackPressed هم استفاده کردم اما تغییری نکرد. کد رو هم پایین قرار میدم لطفا راهنمایی کنید. با تشکر...

 

اکتیویتی تنظیمات

 @Override
protected void onPause() {
super.onPause();
SharedPreferences.Editor ed = sh.edit();
ed.putInt("size?", size);
ed.putString("font?", font);
ed.commit();
}


@Override
public void onBackPressed() {
super.onBackPressed();
SharedPreferences.Editor ed = sh.edit();
ed.putInt("size?", size);
ed.putString("font?", font);
ed.commit();
}
+1 0
این لینک رو هم مطالعه بفرمایید (11 سال پیش)
 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
sami  11 سال پیش
+3 0

با توجه به چرخه حیات اکتیویتی یا همون Activity Lifecycle،همیشه قبل از اجرا شدن هر اکتیویتی،متد onResume اجرا میشه.

پس شما باید کدهای مربوط به خوندن تنظیمات رو تو متد onResume  اکتیویتی ای که متن رو نشون میده بنویسید.

تا قبل از نشون دادن متن،ابتدا خصوصیات TextView ایکه متنو نشون میده  رو از فایل تنظیمات بخونه و براساس همون تنظیمات متنو نشون بده.

(این حالت ( استفاده از متد onResume ) فقط وقتی اتفاق میفته که بخوایم بلافاصله بعد از تغییر تنظیمات برنامه به اکتیویتی نمایش متن برگردیم.درست مثه نرم افزار شما.)

 

برای مثال اگه قبلا فونت متن رو تو اکتیویتی تنظیمات تغییر دادین.برای ست شدن فونت جدید،باید تو متد onResume اکتیویتی ای که متن رو نشون میده فونت TextView ای که اون متنو نشون میده رو تغییر بدین.یعنی کدی بنویسید که فونت رو از SharedPreferences (یا هر جای دیگه ایکه تنظیمات،توش ذخیره شده) بخونه و اونو بعنوان فونت TextView قرار بده.با این کار قبل از نمایش متن مورد نظر،نوع فونت قبلا تعیین شده و متن بر اساس اون نمایش داده میشه.

پاسخ به سوال 
MILAD-MB  11 سال پیش
0 0

ممنونم از پاسختون. انجام دادم اما متاسفانه درست نشد. این بار تغییرات اصلا ذخیره نمیشه. نا گفته نماند که متن بنده از دیتابیس خونده میشه. الان کدی رو که فونت رو عوض میکنم رو میزارم اگه زحمتی نیست دوباره چک کنید لطفا.

اکتیویتی تنظیمات

 @Override
protected void onPause() {
super.onPause();
SharedPreferences.Editor ed = sh.edit();
ed.putInt("size?", size);
ed.putBoolean("roshan?", roshan);
ed.putString("font?", font);
ed.commit();
}

اکتیویتی نمایش متن

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_content);

sh = getSharedPreferences("setting", 0);
size = sh.getInt("size?", 18);
roshan = sh.getBoolean("roshan?", true);
font = sh.getString("font?", "BYekan");
myFont = Typeface.createFromAsset(getAssets(), font + ".ttf");
titr = (TextView) findViewById(R.id.content_titr);
matn = (TextView) findViewById(R.id.content_matn);


  db.open();
//سایر کدها
matn.setTextSize(size);
matn.setTypeface(myFont);
titr.setTypeface(myFont);
//سایر کدها
db.close();
}


@Override
protected void onResume() {
super.onResume();
SharedPreferences.Editor ed = sh.edit();
ed.putInt("size?", size);
ed.putBoolean("roshan?", roshan);
ed.putString("font?", font);
ed.commit();
}
}
+1 0
شما در متد onResome() اکتیویتی نمایش متن یک مرتبه adapter رو cleare کنید و دوباره اطلاعات رو از دیتابیس بگیرید. (11 سال پیش)
پاسخ به سوال 
sami  11 سال پیش
+2 0

سلام.خواهش می کنم،آقا میلاد.

شما باید کدهای بازیابی تنظیمات رو تو متد onResume اکتیویتی نمایش متن قرار بدین.(تو کد بالا شما کد ست کردن تنظیمات رو تو onResume نوشتین).

یعنی باید کدتونو به شکل زیر می نوشتین.

          @Override
protectedvoid onResume(){
super.onResume();

sh = getSharedPreferences("setting",0);
              size = sh.getInt("size?",18);
roshan = sh.getBoolean("roshan?",true);
font = sh.getString("font?","BYekan");
              myFont =Typeface.createFromAsset(getAssets(), font +".ttf");

titr.setTextSize(size);
matn.setTypeface(myFont);


}

درواقع اگه بلافاصله بعد از اکتیویتی نمایش متن،اکتیویتی تنظیمات رو باز کنید و تنظیمات رو تغغیر بدین،چون اکتیویتی نمایش متن در حالت onPause قرار داره،بعد از زدن دکمه Back،اکتیویتی نماش متن دوباره بالا میاد اما متدonCreate این اکتیویتی دوباره اجرا نمیشه!این متد فقط یه بار اجرا میشه.پس چون شما کدهای بازیابی تنظیمات رو تو متد onCreate نوشتین،اکتیویتی نمایش متن نمی تونه تغییرات بوجود اومده در تنظیمات رو بفهمه!مگر اینکه یه بار متد onStop این اکتیویتی  اجرا بشه تا بعد از ورود دوباره شما به اکتیویتی نمایش متن دوباره متد  onCreate اجرا بشه و بعد از اون با اجرا شدن کدهای بازیابی تنظیمات،تنظیمات جدید،ست میشه.

به هر حال متد onResume همیشه قبل از ورود به اکتیویتی اجرا میشه. چه اکتیویتی برای اولین بار اجرا بشه و چه اینکه اکتیویتی تو پشته(stack) باشه و با زدن دکمه back به اکتیویتی برگردیم.

پس شما باید کدای مربوط به بازیابی رو توی این متد بنویسید.

 

0 0
خیلی خیلی ممنون بابت راهنماییتون. مشکلم حل شد. (11 سال پیش)

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