xamarin android

ذخیره حالت Activity در زامارین

در این بخش تئوری پشت ذخیره حالت در چرخه حیات Activity در زامارین توضیح داده می شود.
ابتدا پروژه activity lifecycle را باز کرده و build و run کنید. پروژه بسیار ساده ای است که 2 تا activity دارد که نشان می دهد چرخه حیات چگونه است و متدهای مختلف به چه صورتی فراخوانی می شوند. زمانی که پروژه بالا می آید MainActivity به صورت زیر نمایش داده می شود:

Activity state

تراکنش های View State

تمامی متدهای این نمونه کد در پنجره خروجی اپلیکیشن IDE نوشته شده است تا حالت های activity نمایش داده شود (برای باز کردن پنجره خروجی در ویژوال استدیو CTRL-ALT-O را بزنید و برای باز کردن پنجره خروجی در زامارین استدیو View > Pads > Application Output را بزنید)
زمانی که اپلیکیشن اولین بار اجرا می شود پنجره خروجی حالت تغییر یافته Activity A را نمایش می دهد:

زمانی که روی دکمه Start Activity B کلیک می شود دیده می شود که Activity A ابتدا pause و سپس stop می شود و حالت activity B به سمت تغییر پیش می رود:

در نتیجه Activity B شروع شده و به جای Activity A نمایش داده می شود:

اگر روی دکمه back کلیک شود Activity B ، destroyشده Activity A نیز resume می شود:

اضافه کردن شمارنده کلیک

در این مرحله می خواهیم اپلیکیشن را تغییر دهیم بنابراین دکمه ای برای شمارش قرار داده و تعداد کلیک آن را نمایش می دهیم.
ابتدا متغیر _counter را در MainActivity اضافه می کنیم:

سپس فایل Resource/layout/Main.axml را ویرایش کرده و یک clickButton جدید اضافه نمایید تا تعداد دفعات کلیک روی دکمه را نمایش دهد. در نتیجه فایل Main.axml باید به مشابه زیر شود:

متد OnCreate را در MainActivity اضافه می کنیم. این کد رویداد کلیک را از clickButton هندل می کند:

زمانی که اپلیکیشن build و run می شود. دکمه جدید ایجاد می شود و مقدار _counter را در هر کلیک نمایش می دهد

xamarin android

xamarin android

اما زمانی که گوشی landscape می شود مقدار آن از بین می رود.

xamarin android

با بررسی خروجی نرم افزار دیده می شود که Activity A به ترتیب paused, stopped, destroyed, recreated, restarted اتفاق می افتد و با چرخش از حالت portrait به حالت landscape از سر گرفته می شود:

دلیل آن این است که Destroy,Activity A شده و زمانی که گوشی می چرخد مجددا ایجاد می شود و حالت نمونه از بین می رود. در مرحله بعد کدی برای ذخیره و بازیابی حالت نمونه اضافه خواهد شد.

اضافه کردن کد برای حفظ inastance حالت

ابتدا متدی برای ذخیره instance حالت در MainActivity اضافه می کنیم. قبل از اینکه Destroy,Activity A شود، اندروید به صورت اتوماتیک OnSaveInstanceState را فراخوانی می کند و در یک Bundle آن را پاس می کند که می توانیم برای ذخیره inastance حالت از آن استفاده کنیم. اکنون برای ذخیره تعداد کلیک به عنوان یک مقدار integer از آن استفاده می کنیم:

زمانی که Activity A مجدد ایجاد و resume می شود اندروید این Bundle را به متد OnCreate پاس می دهد. اکنون کد OnCreate را برای بازیابی مقدار _counter از Bundle پاس شده اضافه می کنیم. کد زیر را قبل از خطی که clickbutton تعریف شده است اضافه کنید:

مجددا کد را build و runکنید و سپس دکمه دوم را کلیک کنید. اکنون اگر گوشی را به حالت landscape تغییر دهید مقدار عدد حفظ می شود.

xamarin android

خروجی که در حال اتفاق افتادن است به صورت زیر است:

قبل از این که متد OnStop فراخوانی شود، متد OnSaveInstanceState که جدید نوشتیم برای ذخیره مقدار _counter در Bundle فراخوانی می شود. اندروید زمانی که متد OnCreate ما را فراخوانی می کند مقدار این Bundle را بر می گرداند و می توانیم از آن برای بازیابی مقدار _counter استفاده کنیم.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

62 + = 65