درخواست های ارتباط
جستجو تنظیمات
لیست دوستان من

نمایش اطلاعات یک Entity در برنامه اندروید(Xamarin)

0 نظرات

با سلام به همه دوستان و همراهان سایت Itpro در قسمت های قبلی مراحل ساخت یک برنامه ساده موبایل را با استفاده از برنامه Xamarin توضیح دادیم و در ادامه نیز می خواهیم این برنامه را کامل تر کنیم.

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


ساخت layout مربوط به ItproDetail


برای ساخت این layout مانند layout های قبلی بر روی پوشه layout کلیک راست کرده و گزینه Add و سپس New File را می زنیم و سپس بر روی Android Layout کلیک می کنیم و نام فایل را IptroDetail قرار می دهیم و تایید می نماییم.

به طور پیشفرض هر Layout با یک LinearLayout در داخل آن ساخته می شود یعنی View group پیشفرض آن LinearLayout است. این layout ما شامل تعدادی فیلد است که ممکن است که در بعضی دستگاه ها نیاز به اسکرول کردن نیز داشته باشد. ItproList که قبلا آن را ساخته بودیم به علت این که viewGroup اصلی آن یک ListView است به راحتی امکان اسکرول کردن را به ما می دهد ولی در این layout ما باید که از یک ScrolView استفاده کنیم. در ادامه کار ما ViewGroup مربوط به LinearLayout را از layout حذف می کنیم. برای این کار می توانیم آن را از صفحه موبایلی که به طور پیشفرض نمایش داده می شود حذف کنیم و یا به قسمت کد xml رفته و تگ مربوط به LinearLayout را یکجا حذف کنیم. بعد از حذف آن از قسمت جعبه ابزار یک ScrolView را به صفحه می آوریم. و بر روی آن یک LinearLayout از نوع Vertical قرار می دهیم. اکنون آماده ایم که فیلد های خود را اضافه کرده و تنظیم کنیم. ما برای برچسب و لیبل گذاری هرکدام از فیلد ها از TextView استفاده می کنیم و برای خود فیلد ها از EditText استفاده خواهیم کرد. ما می خواهیم به داده های نام و شرح و آدرس که فیلد کلاس آنها قبلا تعریف شده بود مقداری نسبت بدهیم. برای این کار برای هرکدام از این متغیر ها یک Edti text در نظر می گیریم که به ترتیب نام آنها به این شکل خواهد بود.

  • nameEditText Plain text

  • descrEditText Multiline Text

  • addrEditText Multiline Text

چیزی که ما می خواهیم طراحی کنیم به این شکل می باشد.

Image

روش طراحی شکل بالا هم به گونه ای است که به ترتیب یک Text View گذاشته و متن آن را تغییر می دهیم و به دنبال آن یک EditText از انواع گفته شده قرار می دهیم و مقادیر Id و نوع آنها را تغییر می دهیم.


کارکردن با InputType و انواع ورودی ها


عنصر EditText یک ویژگی به نام InputType دارد که رفتار کنترل را مشخص می کند که چه داده ای می توان در آن وارد کرد. برای مثال وقتی که ما ویجت های شرح و آدرس را اضافه می کنیم گزینه Multiline را از جعبه ابزار انتخاب می کنیم. که این انتخاب ما باعث می شود که کد زیر به صورت اتوماتیک برای آن ویجت تولید شود.

<EditText
p1:inputType="textMultiLine"
p1:layout_width="fill_parent"
p1:layout_height="wrap_content"
p1:id="@+id/descrEditText" />

مشخصه InputType را می توان از پنجره ی properties نیز تغییر داد ولی نکته ای که باید به آن توجه داشت این است که مقادیری که این مشخصه دریافت می کند را می توان با هم ترکیب کرد و به صورت ترکیبی به کار برد. برای مثال InputType در هرکدام از عناصر گفته شده به این شکل است:

  • nameEditText inputType="textCapWords"

  • descrEditText inputType="textMultiLine|textCapSentences"

  • addrEditText inputType="textMultiLine"


  • ساخت اکتیویتی ItproDetail


بعد از این که layout را طراحی کردیم نوبت به استفاده از آن می رسد. برای ساخت activity همان طور که می دانید در قسمت solution کلیک راست کرده و گزینه Add| New File و Activity را اضافه می کنیم و از پنجره ی ظاهر شده نام آن را ItproDetailActivity قرار می دهیم و تایید می کنیم. همانطور که در مطالب گذشته هم گفتیم باید برای activity ساخته شده layout مربوطه را به آن نسبت بدهیم. و برای این کار باید در متد onCreate خط کد زیر را بنویسید

SetContentView (Resource.Layout.ItproDetail);

مقید کردن متغیر ها به کنترل ها


همانطور که قبلا یاد گرفتیم باید به صورت دستی ویجت هایی را که در layout ها قرار دادیم به صورت دستی به متغیرها نسبت بدهیم تا بتوان از آن ها استفاده کرد. برای این منظوع برای هر ویجت یک متغیر از همان کلاس معرفی می کنیم و با استفاده از تابع FindViewById ویجت را به متغیر نسبت می دهیم. به متغیر های معرفی شده زیر دقت کنید.

EditText _nameEditText;
EditText _descrEditText;
EditText _addrEditText;

در مثال زیر نحوه مقید کردن متغیر ها آمده است :

_nameEditText = FindViewById<EditText> (Resource.Id.nameEditText);
_descrEditText = FindViewById<EditText> (
Resource.Id.descrEditText);
_addrEditText = FindViewById<EditText> (Resource.Id.addrEditText);

حرکت بین activity ها


وقتی برنامه ای شروع به اجرا می نماید activity اصلی آن اجرا می شود. حال ما ممکن است که چندین activity در داخل برنامه خود داشته باشیم. ما باید بتوانیم که از یک activity به activityدیگر حرکت کنیم و activity های دیگر را نیز اجرا نماییم. برای این کار ما از تابع startActivity که در داخل کلاس Activity وجود دارد استفاده می کنیم. این تابع دو نوع پارامتر ورودی می تواند دریافت کند. Intent و type. Type همان انواعی هستند که می توانیم به این تابع پاس بدهیم برای مثال اگر ما بخواهیم در activity اصلی برنامه به activiy ساخته شده یعنی همان ItproDetailActivity برویم از کد زیر استفاده می کنیم.

StartActivity(typeof(ItproDetailActivity))

کد بالا ما را به activity مورد نظر انتقال می دهد. اما در بسیاری از اوقات می خواهیم وقتی از یک activity به activity دیگری انتقال یافتیم داده هایی را نیز به همراه خود ببریم. برای این کار از intent ها استفاده می نماییم. به طور مثال فرض کنید که بر روی یک خانه از لیست کلیک کرده و می خواهید که جزئیات این لیست را مشاهده نمایید. برای این کار باید مشخص شود که در activity اول بر روی کدام یک از عناصر لیست کلیک شده است تا در activity دوم بتوان مشخصات آن را نمایش داد. اگر بخواهیم کد بالا را با استفاده از intentها بنویسیم باید این گونه عمل کنیم:

var itproDetailIntent=new Intent(this,typeof(ItproDetailActivity));
StartActivity(itproDetailIntent);

شیئی که از نوع Intent ساخته می شود دارای یک مشخصه به نام Extra است که می توان با استفاده از آن داده ها را بین activity ها منتقل کرد. برای انتقال داده ها باید بعد از ساخته شدن شی از نوع Intent از متد PutExtra مربوط به آن شی استفاده کرده ومقادیری را که می خواهیم به آن نسبت بدهیم و سپس تابع StartActivity() را فراخوانی نماییم. برای مثال به کد زیر دقت نمایید:

var itproDetailIntent=new Intent(this,typeof(ItproDetailActivity));
itproDetailIntent.PutExtra("itproId",entity.Id);
StartActivity(itproDetailIntent);

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

حال اگر بخواهیم که این مقادیر را در activity مقصد دریافت کنیم با توجه به این که نوع داده ارسالی چه بوده است می توانیم از متد مناسب آن استفاده نماییم. برای مثال اگر در activity مبدا ما یک مقدار عددی به تابع putExtra داده باشیم در activity مقصد باید از تابع GetIntExtra() استفاده کنیم. این توابع در کلاس Intent قرار دارند و علاوه بر دریافت کلید رشته ای که در activity مقصد به آن داده شده بود یک مقدار پیش فرض نیز دریافت می نمایند. همچنین برای این که بدانیم از طرف activity مقصد اطلاعاتی با یک کلید خاص ارسال شده است از تابع HasExtra استفاده می کنیم. خروجی این تابع یک مقدار boolean است که اگر کلید مورد نظر مقدار داشته باشد مقدار درست و در غیر این صورت مقدار غلط برمی گرداند.

ما قطعه کد زیر را برای دریافت Id در activity مربوط به ItproDetail نوشته ایم. توجه داشته باشید که این کد باید ابتدای کار activity اجرا شود بنابر این آن را در داخل تابع OnCreate برنامه می نویسیم.

 private ITProEntity entity;
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.ItproDetail);
            if (Intent.HasExtra("ItproId"))
            {
                int entityId = Intent.GetIntExtra("ItproId", -1);
                entity = ITProData.Service.GetEntity(entityId);
            }
            else entity=new ITProEntity();
        }

بعد از همه این توضیحات قصد داریم که اطلاعات یک entity را در ItproDetail نمایش دهیم. از ItproDetail علاوه بر نمایش اطلاعات یک Entity می توان برای افزودن و یا ویرایش اطلاعات نیز استفاده کرد. برای این کار ما با استفاده از کد بالا ابتدا چک می کنیم که کدام یک از entity ها باید لود شده و نمایش داده شود سپس با استفاده از قطعه کد زیر به bind کردن ویجت های می پردازیم و سپس توسط تابع UpdateUI آنها را در صفحه نمایش می دهیم. این تابع به این شکل است که تک تک اطلاعات را به تک تک ویجت ها مقدار دهی می کند برای این کار باید از مشخصه text هرکدام از ویجت ها استفاده کنیم. اگر شما قبلا با کنترل های ویندوزی در C# آشنا باشید با این قسمت مشکلی نخواهید داشت. کد زیر مقادیر نوشته شده برای اکتیویتی ItproDetailActivity را تا اینجا نمایش می دهد.

namespace ItproApp
{
    using Android.App;
    using Android.OS;
    using Android.Widget;
    using ITProApp.Classes;

    [Activity(Label = "ItproDetailActivity")]
    public class ItproDetailActivity : Activity
    {
        private ITProEntity entity;
        private EditText nameText, descrText, addressText;
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.ItproDetail);
            if (Intent.HasExtra("ItproId"))
            {
                int entityId = Intent.GetIntExtra("ItproId", -1);
                entity = ITProData.Service.GetEntity(entityId);
            }
            else entity=new ITProEntity();
            nameText = FindViewById<EditText>(Resource.Id.nameEditText);
            descrText = FindViewById<EditText>(Resource.Id.descrEditText);
            addressText = FindViewById<EditText>(Resource.Id.addressEditText);
            UpdateUI( );
        }

        private void UpdateUI()
        {
            nameText.Text=entity.Name;
            descrText.Text = entity.Description;
            addressText.Text = entity.Address;
        }
    }
}

برای این که از activity اصلی که لیست entity های موجود را به ما نشان می دهد بتوانیم با کلیک بر روی هر entity به این قسمت وارد شویم باید این گونه عمل کنیم که وقتی روی یک عنصر از لیست کلیک شد Id آن عنصر را به عنوان پارامتر مربوط به Activity به intent ارسال نماییم. برای این کار کد زیر را در داخل تابع OnCreate اکتیویتی اصلی یعنی ItpoListActivity بنویسید:

 _itproListView.ItemClick += (sender, args) =>
            {
                var itproDetailIntent = new Intent(this, typeof(ItproDetailActivity));
                itproDetailIntent.PutExtra("itproId", args.Id);

                StartActivity(itproDetailIntent);
            };

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

Itpro باشید

نویسنده: مهدی عادلی فر 

منبع: انجمن تخصصی فناوری اطلاعات ایران 

هر گونه نشر و کپی برداری بدون ذکر نام منبع و نویسنده دارای اشکال است. 

آیا این مطلب را پسندیدید؟
ردیف عنوان قیمت
1 معرفی سیستم عامل اندروید رایگان
2 معرفی سیستم عامل اندروید (بخش دوم) رایگان
3 معرفی سیستم عامل اندروید (بخش سوم) رایگان
4 معرفی Xamarin.Android برای نوشتن برنامه های اندروید به زبان #C رایگان
5 شروع کار برنامه نویسی اندروید با استفاده از Xamarin رایگان
6 ساخت مکانیزم ذخیره سازی اطلاعات در اندروید به زبان #C رایگان
7 طراحی رابط کاربری اندروید با استفاده از Xamarin رایگان
8 ساخت منو صفحه اصلی در اندروید رایگان
9 نمایش اطلاعات یک Entity در برنامه اندروید(Xamarin) رایگان
10 نوشتن Save و Delete برای برنامه اندروید در Xamarin رایگان
هیچ نظری ارسال نشده است

برای ارسال نظر ابتدا به سایت وارد شوید

arrow