ساخت package های جدید برای مدیریت بهتر Activity ها و کلاس ها (class) و همچنین شرح چگونگی ساخت یک Activity جدید برای package ای غیر از package اصلی برنامه اندروید، در برنامه eclipse ، در برنامه نویسی اندروید
همان طور که می دانید، هنگامی که یک پروژه اندروید جدید در برنامه eclipse می سازیم، یک package با نامی مشخص برای آن انتخاب می کنیم (در همان مراحل ساخت پروژه اندروید) و برنامه اندروید تنها دارای یک package است که تمامی Activity ها و کلاس ها (class) ها در آن قرار می گیرند. مثلا بنده در پروژه اندروید زیر، نام com.kelidestan.com را برای package برنامه اندروید انتخاب کرده ام :
اکنون فرض کنید که ما قصد داریم که یک پروژه اندروید با تعداد زیادی Activity و کلاس (class) داشته باشیم، بنابراین می توانیم که برای مدیریت بهتر Activity ها و کلاس ها (class)، یک یا چند package دیگر برای پروژه اندروید بسازیم تا تعدادی از Activity ها و کلاس ها (class) در آنها قرار بگیرند. مثلا فرض کنید که بخشی از برنامه اندروید، برای دانلود فایل از اینترنت می باشد، بنابراین بنده تصمیم می گیرم که یک package با نام com.kelidestan.download بسازم و تمامی Activity ها و کلاس های (class) مرتبط با دانلود فایل را در آن قرار بدهم.
برای ساخت یک package جدید برای پروژه اندروید، ابتدا بر روی نام پروژه اندروید در قسمت Package Manager در برنامه eclipse ، با موس، کلیک سمت راست نموده و گزینه New و سپس گزینه Package را انتخاب می کنیم :
پنجره ای به شکل زیر نمایش داده می شود :
نام package جدیدی که می خواهیم ساخته شود را در قسمت Name نوشته و بر روی گزینه Finish کلیک می کنیم. package جدید در پروژه اندروید ساخته می شود :
خوب اکنون که دو package در پروژه اندروید داریم، انتظارمان این است که برای هر کدام که قصد داریم یک Activity یا یک کلاس (class) جدید بسازیم، باید بر روی همان package ، با موس، کلیک سمت راست نموده و ابتدا گزینه New و سپس گزینه مربوط به ساخت Activity یا کلاس (class) را انتخاب نماییم، اما متاسفانه نتیجه، آن چیزی که فکر می کنیم نیست، یعنی اگر شما مراحل را برای package با نام com.kelidestan.download انجام بدهید، Activity یا کلاس (class) جدید، برای com.kelidestan.com ساخته می شود. این مورد را با مثال شرح می دهیم و همچنین می گوییم که چگونه Activity یا کلاس جدید را بین package های مختلف، جابجا کنید.
به عنوان مثال، من قصد دارم که برای package با نام com.kelidestan.download ، یک Activity جدید با نام DownlodHandler بسازم. برای این منظور، بر روی com.kelidestan.download ، با موس، کلیک سمت راست نموده و ابتدا گزینه New و سپس گزینه Other را انتخاب می کنم :
پنجره ای به شکل زیر نمایش داده می شود :
گزینه Android Activity را انتخاب نموده و سپس بر روی دکمه Next کلیک می کنیم. صفحه زیر نمایش داده می شود :
گزینه Blank Activity که برای ساخت یک Activity ساده به کار می رود را انتخاب نموده و بر روی دکمه Next کلیک می کنیم.
در صفحه بعدی، نام مورد نظرمان برای Activity را در قسمت Activity Name نوشته و نام مربوط به فایل xml متناظر برای لایه گرافیکی Activity را نیز در قسمت Layout Name می نویسیم :
بر روی گزینه Finish کلیک می کنیم تا Activity و فایل xml متناظر با آن ساخته شود :
همان طور که قبلا گفته بودم، بر خلاف انتظار ما، Activity جدید برای package با نام com.kelidestan.com ساخته شده است. بنابراین اکنون باید آن را به package با نام com.kelidestan.download منتقل کنیم. برای این منظور، ابتدا بر روی فایل DownloadHandler.java ، با موس، کلیک سمت راست نموده و سپس گزینه Copy را انتخاب می کنیم. آنگاه بر روی package با نام com.kelidestan.download ، با موس، کلیک سمت راست نموده و گزینه Paste را انتخاب می کنیم تا یک کپی از فایل DownloadHandler.java در آن قرار بگیرد (اکنون دو تا فایل DownloadHandler.java داریم) :
فایل DownloadHandler.java برای package با نام com.kelidestan.com را حذف می کنیم (با موس، بر روی package ، کلیک سمت راست نموده و گزینه Delete را انتخاب می کنیم) :
اما تنها با یک copy و paste ساده، کار انتقال تمام نمی شود، زیرا هنگام ساخت Activity ، در فایل AndroidManifest.xml از پروژه اندروید، نام package مربوط به آن درج شده است و بنابراین باید فایل AndroidManifest.xml را باز کرده و نام package مربوط به آن را تغییر بدهیم :
کدهای فایل AndroidManifest.xml به صورت زیر می باشد :
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.kelidestan.com"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.kelidestan.com.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.kelidestan.com.DownloadHandler"
android:label="@string/title_activity_download_handler" >
</activity>
</application>
</manifest>
مشاهده می کنید که کد مربوط به Activity با نام DownloadHandler ، به صورت زیر نوشته شده است :
android:name="com.kelidestan.com.DownloadHandler"
android:label="@string/title_activity_download_handler" >
</activity>
قبل از نام DownloadHandler ، عبارت com.kelidestan.com نوشته شده است، اما ما باید آن را به عبارت com.kelidestan.download که همان package جدید است، تغییر بدهیم :
android:name="com.kelidestan.download.DownloadHandler"
android:label="@string/title_activity_download_handler" >
</activity>
علاوه بر نکته ای که گفتیم، همان طور که مشاهده می کنید، برای فایل DownloadHandler.java ، یک علامت خطا نمایش داده شده است، آن را باز می کنیم تا ببینیم مشکل از چیست :
همان طور که مشاهده می کنید، منابعی که در کلاس R مشخص می شوند را نتوانسته است تشخیص بدهد، دلیل آن هم واضح می باشد، زیرا وقتی ما تنها حرف R را نوشته ایم، در واقع اشاره به کلاس زیر دارد :
زیرا نام package اصلی برنامه اندروید، com.kelidestan.com می باشد، اما چون Activity با نام DownloadHandler.java در package با نام com.kelidestan.download قرار گرفته، بنابراین نمی تواند کلاس R را بیابد. برای حل این مشکل، باید کلاس com.kelidestan.com.R را وارد (import) کنیم، یعنی باید در ابتدای فایل، کد زیر نوشته شود :
بنابراین کدها را به صورت زیر تغییر می دهیم تا دیگر هیچ خطایی نمایش داده نشود :
شما با کلیک بر روی علامت کوچک نمایش داده شده در کنار نام package ها، می توانید تعیین کنید که Activity ها و کلاس های (class) موجود در آن package ، نمایش داده شوند یا خیر :
مثلا وقتی که با Activity ها و کلاس های یک package کار نمی کنیم، با کلیک بر روی علامت کنار آن، تعیین می کنیم که موارد مربوط به آن نمایش داده نشوند (قسمت Package Explorer در برنامه eclipse ، شلوغ نشود).
بنابراین در این مبحث شرح دادیم که چگونه می توان یک یا چند package جدید برای پروژه اندروید ساخت تا مدیریت Activity ها و کلاس ها (class) ساده تر شود. پس Activity ها و کلاس هایی (class) که به هم مرتبط هستند را در package های جداگانه قرار بدهید تا مثلا در یک پروژه اندروید با 20 یا 30 Activity و کلاس (class)، مدیریت آنها ساده باشد.
سلام ....چیزی نیود که یاد بگیرم
به درد بخور نبود....