درخواست های ارتباط
جستجو
    لیست دوستان من
    صندوق پیام
    همه را دیدم
    • در حال دریافت لیست پیام ها
    صندوق پیام
    رویدادها
    همه را دیدم
    • در حال دریافت لیست رویدادها
    همه رویدادهای من
    اطلاعات دوره آموزشی
    اطلاعات مطلب
      مدرس/نویسنده
      مهدی عادلی فر
      امتیاز: 242796
      رتبه:6
      111
      196
      285
      1456
      مهدی عادلی، بنیان گذار TOSINSO. کارشناس ارشد نرم افزار کامپیوتر از دانشگاه صنعتی امیرکبیر و #C و جاوا و اندروید کار می کنم. در زمینه های موبایل و وب و ویندوز فعالیت دارم و به طراحی نرم افزار و اصول مهندسی نرم افزار علاقه مندم. پروفایل کاربر

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

      تاریخ 39 ماه قبل
      نظرات 0
      بازدیدها 727
      با سلام به همه دوستان و همراهان سایت 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
      چیزی که ما می خواهیم طراحی کنیم به این شکل می باشد.
      نمایش اطلاعات یک Entity در برنامه اندروید(Xamarin)

      روش طراحی شکل بالا هم به گونه ای است که به ترتیب یک 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
        دوره های وب سایت توسینسو

        با دوره های وب سایت توسینسو به همراه برترین اساتید ایران دانش خود را به روز کنید و در کنار آموزش آنلاین پشتیبانی اساتید را هم داشته باشید

        شبکه و زیر ساخت، مجازی سازی، امنیت اطلاعات، برنامه نویسی، گرافیک، اینترنت اشیاء، طراحی وب و صدا ها دوره آموزشی دیگر

        تا 150،000 تومان شارژ هدیه

        همین امروز شروع کنید