مقالات تخصصی برنامه نویسی اندروید

اموزش برنامه نویسی اندروید

مقالات تخصصی برنامه نویسی اندروید

اموزش برنامه نویسی اندروید

  • ۰
  • ۰

 ما در این برنامه دو اکشن برای کلاس ITProListActivity ایجاد خواهیم کرد که به صورت منو در بالای صفحه نمایش داده خواهند شد. این اکشن ها عبارتند از: New که یک موجودیت (entity) جدید به وجود می آورد و دیگری Refresh که کش را بازسازی می کند و محتویات آن را از حافظه محلی می خواند. برای این که یک منو در یک activity بسازیم باید توابع زیر را override نماییم.

OnCreateOptionsMenu این تابع اجازه می دهد که اکشن ها با استفاده از API ها و یا فایل های XML ساخته شوند.

 

 

OnOptionsItemSelected: این تابع وقتی صدا زده می شود که برروی منوی اکشن ها کلیک شود. برای این که مشخص کنیم که وقتی هرکدام از گزینه ها کلیک شد چه عملی انجام شود باید از این تابع استفاده کنیم.

ساخت فایل xml مربوط به منو

 

منو ها و اکشن ها می توانند در داخل یک فایل xml تعریف شوند. که این فایل های xml مربوط به منو ها باید در مسیر پوشه Resources/menu مربوط به پروژه قرار بگیرند. شما می توانید که منو ها را با فراخوانی API ها نیز بسازید. ما منوهای خود را در همان برنامه که قبلا نیز به ساخت آن پرداخته بودیم خواهیم ساخت. کار ساخت منوها در اندروید را ب استفاده از فایل های xml خواهیم گفت. نام فایل xml ساخته شده برای صفحه اصلی در این برنامه ItproListViewMenu.xml می باشد. برای ساخت این منو به شکل زیر عمل می کنیم.

بر روی پوشه ی Resources در قسمت پروژه کلیک راست کرده و گزینه Add|New Folder را انتخاب می کنیم.

از کادر ظاهر شده نام پوشه مورد نظر را menu می گذاریم. با این کار یک پوشه به نام menu در داخل پوشه Resources ساخته می شود. توجه داشته باشید که همه ی فایل های xml مربوط به منوها در برنامه در این پوشه نگهداری می شوند.

برروی پوشه menu کلیک راست کرده و گزینه Add|New File را انتخاب می کنیم.

از پنجره ی ظاهر شده گزینه XML file را انتخاب می کنیم. و نام آن را ItproListViewMenu.xml قرار می دهیم. با این کار فایل مورد نظر شما در پوشه مورد نظر ساخته می شود. حال باید منو ها و گزینه های هر منو را در داخل آن تعریف کنیم.

 

متاسفانه xamarin قالب از پیش تعریف شده ای برای تعریف منو ها ندارد و ابزاری هم برای ساخت و تولید کد مربوط به منوها در خود ندارد برای همین شما باید این قالب را از داخل مستندات اندروید که داخل اینترنت موجود می باشد پیدا کنید. کد زیر نحوه تعریف دو اکشن new و refresh را نمایش می دهد.

<menu xmlns:android="http://schemas.android.com/apk/res/android">

<item android:id="@+id/actionNew"

android:icon="@drawable/ic_new"

android:title="New"

android:showAsAction="ifRoom" />

<item android:id="@+id/actionRefresh"

android:icon="@drawable/ic_refresh"

android:title="Refresh"

android:showAsAction="ifRoom" />

</menu>

 

 

به این نکته توجه داشته باشید که ما برای هرکدام از آیتم های منوی خود یک آیکن در نظر گرفته ایم که محل آن در پوشه ی drawable می باشد. که نام های آنها icnew و icrefresh می باشد.

کد فراخوانی منو از فایل xml

 

برای این که از فایل xml که در قسمت قبلی ساختیم تبدیل به یک منو شود باید از تابع OnCreateOptionsMenu که در داخل activity قرار دارد استفاده کنیم و آن را override نماییم. کلاس activity یک متد MenuInflater دارد که فایل های xml مربوط به منو ها را خوانده و آنها را تبدیل به منو می نماید بنابراین ما نیز برای ساختن منوی خود از این متد استفاده خواهیم کرد. کد زیر نحوه پیاده سازی منو را شرح می دهد.

 

 public override bool OnCreateOptionsMenu(IMenu menu)

        {

            MenuInflater.Inflate(Resource.Menu.ItproListViewMenu,menu);

            return base.OnCreateOptionsMenu(menu);

        }

مدیریت انتخاب آیتم های یک منو

 

وقتی که یکی از آیتم های منو انتخاب می شوند تابع OnOptionsItemSelected فراخوانی می شود. این تابع در داخل کلاس activity قرار دارد. این تابع یک ورودی از اینترفیس IMenu دارد. ما باید داخل این تابع بررسی کنیم که کدام یک از آیتم ها انتخاب یا کلیک شده است و با توجه به آن عمل مورد نظر را انجام دهیم. برای این که بدانیم کدام یک از آیتم های منو ها انتخاب شده اند از فیلد ItemId که در پارامتر ورودی تابع قرار دارد استفاده می کنیم. این فیلد همان Id تعریف شده در قسمت Resource را به ما می دهد. کد زیر نحوه پیاده سازی این تابع را نشان می دهد.

 

 public override bool OnOptionsItemSelected(IMenuItem item)

        {

            switch (item.ItemId)

            {

                case Resource.Id.actionNew:

                    // place holder for creating new entity

                    return true;

                case Resource.Id.actionRefresh:

                    ITProData.Service.RefreshCache();

                    _adapter.NotifyDataSetChanged();

                    return true;

                default:

                    return base.OnOptionsItemSelected(item);

            }

        }

 

  • ۹۹/۰۴/۰۲
  • vahid hasani

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی