آموزش برنامه نویسی اندروید فصل سوم
آموزش اندروید فصل سوم قسمت پنجم – RelativeLayout
تیر ۴, ۱۳۹۵
آموزش برنامه نویسی اندروید فصل سوم
آموزش اندروید فصل سوم قسمت هفتم – Action bar
تیر ۷, ۱۳۹۵

آموزش اندروید فصل سوم قسمت ششم – حفظ اطلاعات

آموزش برنامه نویسی اندروید فصل سوم

آموزش برنامه نویسی اندروید فصل سوم

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

آموزش اندروید فصل سوم قسمت ششم – حفظ اطلاعات

تداوام وضعیت اطلاعات  در هنگام تغییرات اساسی

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

  • ()OnPause : این متد هنگام نابودی اکتیویتی یا به پس زمینه رفتن اکتیویتی استفاده میشود.
  • ()onSavedInstanceState : این متد هم مثل متد بالا هنگام نابودی اکتیویتی یا هنگام پس زمینه رفتن اکتیویتی اجرا میشود با این تفاوت که این متد پس از نابودی اکتیویتی اطلاعات را ذخیره میکند.درواقع اجرای پیش فرض این متد اطلاعات درمورد وضعیت سلسله مراتبی ابزار اکتیویتی را ذخیره میکند.برای مثال متن درون ابزار EditText 

مثال زیر نحوه ذخیره یک رشته به نام ای دی را درون شی Bundle در متد ()onSavedInstanceState را نشان میدهد توجه کنید که این متد یک آرگومان Bundle را ارایه میدهد و همچنین از مقادیر key برای حفظ اطلاعات استفاده میکند. همانگونه که مشاهده میکنید با متد ()pustString یک مقدار رشته ای را با نام ID و مقدار مشخص ذخیره میکند.در انتها نیز superclass را برای ذخیره سازی فراخوانی کنید

@Override

Public void onSavedInstanceState(Bundle onSavedInstance) {

//--save whatever you need to persist—

outstate.putString("name", "Marjan");

super.onSavedInstanceState(onSavedInsatance);

}

وقتی که یک اکتیویتی باز ایجاد گردد اولین متدی که اجرا میشود متد ()onCreate است و به دنبال آن متد ()onRestoreInstanceState نیز اجرا میگردد تا حالت قبلی که با استفاده از متد ()onSavedInstanceState به واسطه شی Bundle (به این نکته توجه داشته باشید که تنها میتوان اطلاعات را در شی Bundle ذخیره کرد.) به عنوان آرگومان ذخیره شده است بازیابی گردد:

@Override

Puclic void onRestoreInstanceState(Bundle savedInstanceState) {

Super.onRestoreInstanceState(savedInstanceState);

//--retrive the information persisted earlier—

String name= savedInstanceState.getString("name");

تشخیص تغییر جهت

بعضی مواقع نیاز است تا در زمان اجرای برنامه وضعیت جهت دستگاه را بدانیم برای اینکار از کلاس WindowManager استفاده میکنیم.

قطعه کد زیرتشخیص وضعیت دستگاه را هنگام اجرا نمایش میدهد:

import android.os.Bundle;

import android.util.Log;

import android.app.Activity;

import android.view.*;



public class MainActivity extends Activity {



        @Override

        protected void onCreate(Bundle savedInstanceState) {

                 super.onCreate(savedInstanceState);

                 setContentView(R.layout.activity_main);



                 //--get the current display info--

                 WindowManager wm = getWindowManager();

                 Display d=wm.getDefaultDisplay();



                 if(d.getWidth() > d.getHeight())

                 {

                           //--Landscape mode--

                           Log.d("Oriention", "Landscape mode");

                 }

                 else

                 {

                           //--portrait mode--

                           Log.d("Oriention", "Portrait mode");

                 }

        }



}

متد ()getDefaultDisplay یک شی از نوع Display که همان صفحه نمایش دستگاه باز است را برمیگرداند سپس با استفاده از طول و عرض آن میتوان جهت دستگاه را مشخص نمود.

کنترل جهت نمایش

گاهی اوقات تمایل دارید که برنامه شما تنها در یک جهت نمایش و اجرا شود برای این کار نیز میتوان از متد ()setRequestOriention کلاس اکتیویتی به شکل زیر استفاده کرد

import android.content.pm.ActivityInfo;



@Override

        protected void onCreate(Bundle savedInstanceState) {

                 super.onCreate(savedInstanceState);

                 setContentView(R.layout.activity_main);



                 //--change to landscape mode--

                 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

        }

قطعه کد فوق صفحه دستگاه را به صورت عمودی نمایش میدهد. برای نمایش در حالت افقی نیز از عبارت زیر استفاده میکنیم

ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE

راه دیگری نیز برای تعیین جهت صفحه نمایش وجود دارد بدین ترتیب که در فایل manifest برنامه با استفاده از خصوصیت android:screenOrientation چنین تغییری ایجاد کنیم

<activity

            android:name=".MainActivity"

            android:label="@string/app_name"

            android:screenOrientation="portrait" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />



                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

کد بالا اکتیویتی را به صورت عمودی نمایش میدهد(landscape  نیز برای حالت افقی و Sensor براساس سنسور شتاب سنج صفحه بکار میرود که به صورت پیش فرض از Sensor استفاده میشود) و از نابود شدن اکتیویتی جلوگیری میکند این بدین معناست که اکتیویتی با چرخش صفحه از بین نمیرود و نیازی به فراخوانی مجدد متد ()onCreate نیست.

مدرس : خانم مهندس داودی نژاد

آموزش اندروید فصل سوم قسمت پنجم

آموزش اندروید فصل سوم قسمت هفتم

پاسخ دهید

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