ریستارت شدن اکتیویتی هنگام rotation در اندروید
rotation مشکلی است که برای هر توسعه دهنده ی اندرویدی به وجود می آید، احتمالا برای شما هم پیش آمده هنگامی که یک اپلیکیشن را توسعه داده اید، هنگام rotation اکتیویتی شما رستارت میشود و تمام المنت ها از اول تعریف میشوند و شما دلیل این اتفاق را نمی دانید، با Zero to Hero همراه باشید تا به بررسی این مشکل بپردازیم.
مشکل از جایی ناشی میشود که شما باید initialization اپلیکیشن خود را تغییر دهید، initialization یعنی قسمتی از کدهای شما که دکمه ها، لیبل ها و سایر المنت های نمایشی را تعریف کرده اید که اصطلاحا به آن init هم گفته میشود. ابتدا یک کلاس بسازید و آن را از Application ارث بری کنید و درون متد onCreate کلاس جدید init خود را انجام دهید (یعنی دکمه ها، تکست ها، لیبل ها و سایر موارد را تعریف کنید)
public class MyApplicationClass extends Application { @Override public void onCreate() { super.onCreate(); // TODO Put your application initialization code here. } }
متد onCreate درون این کلاس Application تنها زمانی اجرا میشود که کل اپلیکیشن شما ساخته میشوند، بنابراین رستارت شدن اکتیوی تاثیری روی کلاس Application ندارد. همچنین شما میتوانید برای پیاده سازی این کلاس از دیزاین پترن Singelton استفاده کنید تا مجموعه ای از setter ها و getter ها برای خود بسازید.
یک نکته ی مهم را فراموش نکنید، شما باید کلاس Application را درون Manifest تعریف کنید تا این کلاس قبل از هر کلاس دیگری اجرا شود.
<application android:name="com.you.yourapp.MyApplicationClass"
واکنش به تغییر کانفیگ ( از API 13 به بعد این روش Deprecate شده است )
شما میتوانید به یک سری از رویدادهای خاص گوش دهید تا هنگام اجرا شدن یک رویداد خاص آن را متوقف کنید یا یک سری از عملیات های خاص روی آن انجام دهید، برای مثال میتوانید به Manifest که قلب تپنده ی اپلیکیشن شما میباشد تنظیماتی را اضافه کنید که هنگام تغییر Orientation کی بورد مخفی شود.
android:configChanges="keyboardHidden|orientation"
برای API 13 (اندروید ۳.۲) یا ورژن های جدیدتر میتوانید از کد زیر استفاده کنید :
android:configChanges="keyboardHidden|orientation|screenSize"
سپس در اکتیوی خود باید متد onConfigurationChanged را اضافه کنید تا هنگام Orientation لایه ها دوباره سرهم شوند.
@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); setContentView(R.layout.myLayout); }
موفق باشید.
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.