جديد طالب الجامعة العربية المفتوحة


النتائج 1 إلى 15 من 15



  1. رقم #1
     افتراضي  العنوان : دورة: تطوير تطبيقات Android
    بتاريخ : 30-01-2012 الساعة : 10:23 PM

    Sin. Java Developer

    الصورة الرمزية A.alfadhel

    رقم العضوية : 12176
    الانتساب : Jan 2012
    المشاركات : 63
    بمعدل : 0.44 يوميا
    معدل تقييم المستوى : 1
    التقييم : Array
    شكراً و أعجبني للمشاركة
    المحادثة: 0
    A.alfadhel غير متواجد حالياً




    الدرس اﻷول : مقدمة: تطوير تطبيقات Android



    ماهو Android؟

    اولا: النظام
    نظام تشغيل مفتوح المصدر مبني على قاعدة Linux يدار بواسطة Open Handset Alliance الذي تتزعمه شركة Google تعتمد تطبيقاته على بيئة افتراضية للـ Java.
    توفر شركة Google مجموعة من الادوات للتطوير على هذا النظام معتمدة في ذلك على قاعدة تطبيقات قوية تعرف باسم eclipse platform.
    يدعم هذا النظام بعض التقنيات من الصور ثنائية وثلاثية الابعاد باستخدام مكتبات OpenGL كما يستخدم قاعدة بيانات SQLite في تخزين جميع البيانات الموجودة في التطبيقات الاساسية كالاسماء والرسائل النصية مما يسهل امكانية الربط بين جميع التطبيقات الموجودة في النظام وخارج النظام.





    ثانيا: أهم مكونات النظام
    • Activity: يمثل طبقة العرض presentation layer لاي تطبيق, يعرف لدي الجميع بمسمى الشاشات أو الواجهات. يمكن للتطبيق الواحد ان يحوي أكثر من Activity يمكن التنقل بينها.
    • Views: تمثل مكونات الواجهة. تحتوي على صفات تستخدم لتغيير شكل او طريقة عرض هذا المكون.
    • Services: مهام تعمل في الخلفية بدون اي واجهة, يمكن استخدامها لتنبية المستخدم كتنبيهه برسالة نصية جديدة.
    • ContentProvider: تقوم بتزويد التطبيقات بالبيانات, عن طريق طريقها يستطيع تطبيقك مشاركة بياناته مع التطبيقات الآخرى. هذه البيانات تخزن في قاعدة بيانات SQLite الموجودة في النظام.
    • Intents: رسائل غير متزامنة تمكن تطبيقك من استخدام او الاستفادة من مميزات تتيحها خدمات او تطبيقات آخرى أو خدمة من خدمات النظام كـGPS.
    • BroadcastReceiver: تستقبل رسائل النظام ورسائل Intents. كما تستخدم لاحداث فعل بناءا على تغير حالة النظام أو الجهاز. لاستخدامه تحتاج لتسجيل BroadcastReceiver لحدث معين ويمكن ان يبداء في حالة حدوث هذا الحدث.
    • Widgets: مكونات تفاعلية تستخدم بشكل رئيسي في الشاشة الرئيسية للنظام لعرض بيانات محددة ولتمكن المستخدم من الوصول السريع للمعلومة.
    ثالثا: البيئة الافتراضية Dalvik Virtual Machine


    نظام Android يستخدم بيئة افتراضية تعرف باسم Dalvik Virtual Machine. هذه البيئة تستخدم bytecode خاصة لذلك لا تستطيع تشغيل bytecode الاعتيادة لـJava.
    Android يقدم اداة dx التي تقوم بتحويل Java Class الى ملفات dex التي تفهمها بها بيئة Dalvik. التطبيقات تجمع على شكل حزمة apk - Android Package - بواسطة اداة aapt. جميع هذه الادوات واكثر موجودة ضمن ادوات التطوير.
    رابعا: الامان والاذونات
    Android يعرف اذونات معينة لمهام معينة. كتطبيق يستخدم الانترنت يجب ان يطلب اذن المستخدم لاستخدامه هذا الاذن يطلب في ملف اعدادات التطبيق. هذا الاذن يطلب من المستخدم اثناء تثبيت التطبيق.

    هيكل تطبيقات Android

    أولا: AndroidManifest.xml
    يوصف تطبيق Android في هذا الملف. الذي يجب فيه سرد جميع Activities, Services, BroadcastReceivers, ContentProvider الموجودة في هذا التطبيق. كما يجب هنا طلب جميع الاذونات التي يحتاجها التطبيق.

    كود:
    <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="alfadhela.android.myapp" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".Main" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
    </application> <uses-sdk android:minSdkVersion="9" />
    </manifest>
    package: يكتب فيها package الاساسية التي تتظمن Java Classes يجب انت تكون متميزة والا لن تستطيع عرض تطبيقك في متجر التطبيقات.
    android:versionName و android:versionCode: يكتب فيها رقم اصدارة التطبيق.
    versionName: خانة نصية لتوضيح رقم الاصدارة للمستخدم.
    versionCode: خانة رقمية تمثل اصدارة النص البرمجي تستخدم في تحديث التطبيق من نسخة قديمة الى نسخة احدث يستفادة منها في عملية نقل بيانات الاصدارة القديمة في حالة اعادة رسم قاعدة البيانات حتى لا يفقد المستخدم بياناته.
    وسم <activity>: يعرف فيه Activity, في هذا المثال وضعنا alfadhela.android.myapp.Main عندما وضعنا Main. في خانة android:name.
    android:label: يستخدم لوضع اسم activity الذي سيظهر للمستخدم.
    وسم <intent-filter>: يقوم بتعريف activity للنظام من حيث الاجراء والتصنيف.
    <action android:name="android.intent.action.MAIN" />: وضح هذا الاجراء ان هذا activity هو activity الرئيسي الذي يعمل به البرنامج.
    <category android:name="android.intent.category.LAUNCHER" />: وضح هذا التصنيف ان activity يظهر في البرنامج الرئيسي للنظام كاختصار.
    uses-sdk: يحدد اصدارة النظام التي يمكن للبرنامج العمل معها.

    ثانيا: R.java, Resources and Assets
    مجلد gen في مشروع تطبيق Android يحتوي قيم منشأة تلقائيا. R.java هو ملف يحتوي على هذه القيم الموجودة في الملفات تحت مجلد res هذا المجلد يحتوي قيم مختلفة قد تكون نصوص أو قائمة أو واجهات أو رموز أو صور أو مؤثرات حركية.

    ثالثا: قيم مرجعية في ملفات XML
    في ملفات XML تستطيع اعطاء قيمة كاللون لعنصر في الواجهة كقيمة مرجعية من ملف XML آخر باستخدام @color/color_id مثل هذه الطريقة للنصوص والصور.

    رابعا: واجهات التطبيق
    تستطيع انشاء واجهة التطبيق عنطري نص مصدري Java مباشرة أو عن طريق ملف XML كما تستطيع انشاء عنصر خاص بك واستخدامه في ملف XML الخاصة بالواحهة. هذا الملف يجب ان يكون تحت مجلد: /res/layout
    لربط واجهة التطبيق بملف XML نستخدم:
    findViewById(R.id.yourXMLname)

    خامسا: دورات الحياة

    التطبيق Activity


    الخدمة Service


    المكونات التفاعلية Widgets



    هذه مقدمة بسيطة عن نظام Android وتطبيقاته.


    الدرس على شكل مستند PDF.


    التعديل الأخير تم بواسطة A.alfadhel ; 01-02-2012 الساعة 05:06 PM

     





  2. رقم #2
     افتراضي  العنوان : رد: دورة: تطوير تطبيقات Android
    كاتب الموضوع : A.alfadhel
    بتاريخ : 31-01-2012 الساعة : 01:36 PM

    .: جامعي جديد :.

    الصورة الرمزية المشكاة

    رقم العضوية : 7740
    الانتساب : Dec 2010
    المشاركات : 12
    بمعدل : 0.02 يوميا
    معدل تقييم المستوى : 2
    التقييم : Array
    شكراً و أعجبني للمشاركة
    المحادثة: 0
    المشكاة غير متواجد حالياً




    شرح وااضح

    بارك الله فيك

    يعطيك العااافية


     





  3. رقم #3
     افتراضي  العنوان : رد: دورة: تطوير تطبيقات Android
    كاتب الموضوع : A.alfadhel
    بتاريخ : 31-01-2012 الساعة : 02:43 PM

    • الإداريين •


    الصورة الرمزية Nasser

    رقم العضوية : 4695
    الانتساب : Mar 2010
    المشاركات : 904
    بمعدل : 1.15 يوميا
    معدل تقييم المستوى : 500
    التقييم : Array
    شكراً و أعجبني للمشاركة
    المحادثة: 0
    Nasser متواجد حالياً




    يعطيك العافية مهندس عبدالله

    على الشرح الوافي

    بس عندي كم استفسار راح اطرحها في موضوع الإستفسارات

    http://www.4uaou.com/vb/forum34/thread13420.html

    تحياتي
    ]Nasser[


    توقيـــع : Nasser
    يكفي المرء احساسه وايمانه بقدراته اما من ينتظر ان يقيمه الاخرون فلا شك انه سوف يعاني كثيراً .قيمة الانسان فيما يصنع وليس فيما يتحدث به الاخرون الذين لا يفهمون ان الاساءة للانسان الكريم لا تدميه . بل ترفعه عاليا مثل الشجره المثمره ترمى بالحجاره فلا يؤذيها ان الثمر الناضج يسقط على الارض اذ انها تعرف اي خير وعطاء يكمن فيها .....
    للكاتب : علي حمزه علي


     





  4. رقم #4
     افتراضي  العنوان : رد: دورة: تطوير تطبيقات Android
    كاتب الموضوع : A.alfadhel
    بتاريخ : 01-02-2012 الساعة : 05:25 PM

    Sin. Java Developer

    الصورة الرمزية A.alfadhel

    رقم العضوية : 12176
    الانتساب : Jan 2012
    المشاركات : 63
    بمعدل : 0.44 يوميا
    معدل تقييم المستوى : 1
    التقييم : Array
    شكراً و أعجبني للمشاركة
    المحادثة: 0
    A.alfadhel غير متواجد حالياً




    الدرس الثاني : مقدمة عن قاعدة بيانات SQLite و Android

    ما هي SQLite؟
    قاعدة بيانات مفتوحة المصدر موجودة ضمن نظام تشغيل Android.
    SQLite قاعدة بيانات مترابطة - relational database - تستخدم لغة استعلام مقاربة لـ SQL الاعتيادية وتتميز بانها خفيفة الحجم 250 كيلوبايت تقريبا.
    تدعم انواع بيانات كـ TEXT المشابه لـ String في Java و INTEGER المشابه لـ Integer في Java كما تقدم REAL المشابه لـ Double في Java جميع الانواع الاخرى يجب ان تحول الى هذه الانواع قبل حفظها. SQLite لا تقوم باي تحقق من نوع البيانات المخزنة مثلا تستطيع حفظ String في خانة Integer والعكس صحيح.

    SQLite و Android
    كل جهاز يحمل نظام تشغيل Androdi يحتوي على قاعدة بيانات SQLite. لاستخدام SQLite على اجهزة Android لا تحتاج الى اي اعداد او تثبيت لا تطبيق او اضافة جديدة.
    تحتاج الى كتابة أوامر SQL لانشاء وتعديل قواعد البيانات. بعد ذلك النظام سيقوم بإدارة قواعد البيانات بصورة تلقائية.
    تتشكل قواعد بيانات SQLite على شكل ملفات. بناء على ذلك فإن الوصول اليها يكون عن طريق نظام الملفات. وهذا يسبب بطيء في التعامل مع قاعدة البيانات. لذلك يفضل ان تكون جميع عمليات قاعدة البيانات بشكل متزامن مثلا: يستخدم AsyncTask.
    تطبيقك يقوم بانشاء قاعدة بيانات. هذه القاعدة تقون تحت العنوان:
    DATA/data/APP_NAME/databases/FILENAME.

    بناء SQLite
    الحزم
    android.database: تحتوي جميع الـ Classes التي تتعامل مع قواعد البيانات.
    android.database.sqlite: تحتوي جميع الـ Classes الخاصة بقاعدة بيانات SQLite.

    SQLiteOpenHelper
    لانشاء أو تحديث قاعدة بيانات يجب ان يكون الـ Class الخاصة بها يرث SQLiteOpenHelper.
    في الـ constructor يجب ان تستدعي الدالة ()super وتحدد اسم قاعدة البيانات واصدارتها.
    كما تحتاج الى اعادة كتابة دالتي ()onCreate و ()onUpgrade.
    ()onCreate تستدعى في حالة عدم وجود قاعدة البيانات.
    ()onUpgrade تستدعى في حالة كون اصدارة قاعدة البيانات احدث من النسخة الموجودة. يمكن الاستفادة منها في تعديل قاعدة البيانات القديمة.
    SQLiteOpenHelper: تقدم دوال منها ()getReadableDatabase التي تستخدم لقراءة بيانات من قاعدة البيانات ()getWriteableDatabase التي تستخدم لكتابة بيانات في قاعدة البيانات.
    كل جدول يحتوي على عمود id_ يعتبر هو المفتاح للجدول تعتمد عليه الكثير من عمليات نظام Android.
    يفضل دائما وضع كل جدول في Class .

    SQLiteDatabase
    يستخدم للتعامل مع قاعدة البيانات يقدم دوال منها open, query, update, close.
    كما يقدم دوال متخصص كـ insert, update و delete.
    وايضا دالة execQuery للقيام باي عملية SQL.
    ContentValues: يعطي امكانية تعريف key و values تستخدم كالتالي:
    key: يمثل المفتاح المميز في الجدول .
    Values: تمثل قيم الاعمدة في الجدول بناء على المفتاح المميز.
    كما يمكن استخدامه لاضافة وتعديل وحذف البيانات.
    الاستعلامات تنشأ باستخدام دالتي query او rawQuery كما يمكن استخدام SQLiteQueryBuilder.
    مثال rawQuery:
    كود:
    Cursor cursor = getReadableDatabase().
    	rawQuery("select * from todo where _id = ?", new String[] { id });
    تستخدم معها اوامر استعلام اعتيادية SQL.
    مثال query:
    كود:
    return database.query(DATABASE_TABLE, 
    	new String[] { KEY_ROWID, KEY_CATEGORY, KEY_SUMMARY, KEY_DESCRIPTION }, 
    	null, null, null, null, null);
    المتغير الوصف
    String dbName اسم قاعدة البيانات
    String[] columnNames اسماء الاعمدة التي ترغب في معرفة قيمها null تعني ان جميع الاعمدة سترجع قيمتها
    String whereClause Where-clause
    String[] selectionArgs قيم Where-clause
    String[] groupBy جزئية group by: طريقة تقسيم النتائج الى مجموعات
    String[] having فلتر المجموعات
    String[] orderBy الترتيب null تعني عدم الترتيب

    Cursor
    دالة query تعطينا Cursor الذي يقوم بعرض جميع النتائج الموجودة به سطر سطرا.
    لمعرفة عدد النتائج نستدعي دالة getCount.
    للتنقل بين الاسطر يمكن استخدام دوال moveToFirst و moveToNext . كما يمكن استخدام دالة isAfterLast لمعرفة للتأكد من انتهاء النتائج.
    يمكن استخدام دوال * get للوصول الى قيمة العمود.

    هذه مقدمة مختصرة عن قاعدة بيانات SQLite و Android ستتضح الفكرة مع التطبيق.

    الدرس على شكل ملف PDF


    التعديل الأخير تم بواسطة A.alfadhel ; 07-02-2012 الساعة 12:46 PM سبب آخر: اضافة ملف PDF

     





  5. رقم #5
     افتراضي  العنوان : رد: دورة: تطوير تطبيقات Android
    كاتب الموضوع : A.alfadhel
    بتاريخ : 02-02-2012 الساعة : 12:51 AM

    .: جامعي جديد :.

    الصورة الرمزية zubayda

    رقم العضوية : 11501
    الانتساب : Nov 2011
    المشاركات : 22
    بمعدل : 0.12 يوميا
    معدل تقييم المستوى : 1
    التقييم : Array
    شكراً و أعجبني للمشاركة
    المحادثة: 0
    zubayda غير متواجد حالياً




    بارك الله لك وبجهودك ونفع بك الاسلام والمسلمين


    توقيـــع : zubayda
    Microsoft Student Partner

    follow us at
    \

    twitter:
    @MSP_AOU

    FaceBook:


     





  6. رقم #6
     افتراضي  العنوان : رد: دورة: تطوير تطبيقات Android
    كاتب الموضوع : A.alfadhel
    بتاريخ : 02-02-2012 الساعة : 01:00 AM

    .: جامعي ألماسي :.


    الصورة الرمزية شباب الثورة

    رقم العضوية : 12173
    الانتساب : Jan 2012
    المشاركات : 8,242
    بمعدل : 57.90 يوميا
    معدل تقييم المستوى : 18
    التقييم : Array
    شكراً و أعجبني للمشاركة
    المحادثة: 185
    شباب الثورة غير متواجد حالياً




    جزاك الله خيراً


    توقيـــع : شباب الثورة

     





  7. رقم #7
     افتراضي  العنوان : رد: دورة: تطوير تطبيقات Android
    كاتب الموضوع : A.alfadhel
    بتاريخ : 02-02-2012 الساعة : 03:52 PM

    .: جامعي جديد :.

    الصورة الرمزية سمر

    رقم العضوية : 5766
    الانتساب : May 2010
    المشاركات : 48
    بمعدل : 0.06 يوميا
    معدل تقييم المستوى : 3
    التقييم : Array
    شكراً و أعجبني للمشاركة
    المحادثة: 0
    سمر متواجد حالياً




    الله يعطيك العافيه .. عندي كم سؤال بس راح انزلهم بس ارتبهم
    *


     





  8. رقم #8
     افتراضي  العنوان : الدرس الثالث : تجهيز بيئة العمل (تطبيق)
    كاتب الموضوع : A.alfadhel
    بتاريخ : 04-02-2012 الساعة : 08:04 PM

    Sin. Java Developer

    الصورة الرمزية A.alfadhel

    رقم العضوية : 12176
    الانتساب : Jan 2012
    المشاركات : 63
    بمعدل : 0.44 يوميا
    معدل تقييم المستوى : 1
    التقييم : Array
    شكراً و أعجبني للمشاركة
    المحادثة: 0
    A.alfadhel غير متواجد حالياً





    الدرس الثالث : تجهيز بيئة العمل (تطبيق)

    خطوات تجهيز بيئة العمل Java JDK لتطوير تطبيق Java

    أولا: نظام التشغيل MS Windows

    تنزيل الحزمة من 32bit أو 64bit.
    نواصل مع معالج التثبيت.


    شاشة ترحيبية توضح اصدارة Java رقم 7. كما توضح ان هناك معالج لتثبيت JavaFX SDK بعد هذا المعالج.
    ملاحظة: رقم الإصدارة يحمل رقم آخر وهو 1.7.



    من هنا تستطيع تحديد الحزم التي ترغب في وجودها.
    Development Tools: هي ادوات تطوير Java ضرورية في حالة الرغبة في انشاء اي تطبيق Java.
    Source Code: النص المصدري للغة Java. حزمة اختيارية يمكن الاستغناء عنها.
    Public JRE: تحتوي بيئة التشغيل الخاصة بـ Java وهي ضرورية لعمل اي تطبيق مكتوب بلغة Java وايضا لتطوير اي تطبيق جديد بلغة Java.



    هنا نكمل عملية التثبيت.



    تمت عملية التثبيت بنجاح. بعد هذه الشاشة قد تظهر شاشة أخرى تطلب تثبيت JavaFX SDK.



    يمكن تجاهل هذه الشاشة بالضغط على زر Cancel.

    ثانيا: أنظمة تشغيل Linux

    Debian, Ubuntu, etc.
    من تطبيق Terminal
    كود:
    sudo apt-get install openjdk-7-jdk
    Fedora, Oracle Linux, Red Hat Enterprise Linux, etc.
    من تطبيق Terminal
    كود:
    su -c "yum install java-1.7.0-openjdk"
    ثالثا: نظام Apple Mac OS X
    Mac OS X 10.6 -
    يأتي التظام مع حزمة التطوير JDK

    Mac OS X 10.7
    عند محاولة تشغيل اي تطبيق Java سيقوم النظام بتثبيت حزمة التطوير JDK


     





  9. رقم #9
     افتراضي  العنوان : الدرس الرابع : خطوات تثبيت وإعداد Eclipse IDE لتطوير تطبيقات Java
    كاتب الموضوع : A.alfadhel
    بتاريخ : 04-02-2012 الساعة : 08:07 PM

    Sin. Java Developer

    الصورة الرمزية A.alfadhel

    رقم العضوية : 12176
    الانتساب : Jan 2012
    المشاركات : 63
    بمعدل : 0.44 يوميا
    معدل تقييم المستوى : 1
    التقييم : Array
    شكراً و أعجبني للمشاركة
    المحادثة: 0
    A.alfadhel غير متواجد حالياً





    الدرس الرابع : خطوات تثبيت وإعداد Eclipse IDE لتطوير تطبيقات Java

    ماهو Eclipse؟

    هو بيئة تطوير للغات برمجة متعددة مثل C, C++, Java, COBOL, PHP, Pearl, Python, R, Ruby, Groovy مكتوب اغلبه بلغة Java.
    يتميز باضافاته Plug-ins الكثيرة والمتعددة. كما يدعم اغلب انظمة التشغيل وبالطبع هو مفتوح المصدر Open Source.

    خطوات التثبيت

    ملاحظة جميع الخطوات تنطبق على اي نظام تشغيل.

    في البداية نحتاج تثبيت حزمة التطوير JDK. من هنا.

    من موقع eclipse نقوم بتنزيل آخر اصدارة للبرنامج http://www.eclipse.org/downloads/



    نختار Eclipse IDE for Java EE Developers
    نحدد البيئة 32bit أو 64bit.

    بعد تنزيل الملف المضغوط نفك ضغط الملف.



    سينتج لنا مجلد اسمه eclipse.



    داخل هذا المجلد تطبيق اسمه eclipse.exe.



    نفتح التطبيق.





    سيطلب منك البرنامج تحديد موقع مساحة العمل Workspace الخاصة بك.



    هذه هي الواجهة الرئيسية للبرنامج. يمكنك اغلاق شاشة الترحيب لبدء العمل.


    التعديل الأخير تم بواسطة A.alfadhel ; 05-02-2012 الساعة 07:29 PM سبب آخر: اصلاح رابط

     





  10. رقم #10
     افتراضي  العنوان : رد: دورة: تطوير تطبيقات Android
    كاتب الموضوع : A.alfadhel
    بتاريخ : 05-02-2012 الساعة : 10:50 AM

    .: جامعي جديد :.

    الصورة الرمزية علو الهمة

    رقم العضوية : 3238
    الانتساب : Apr 2009
    المشاركات : 44
    بمعدل : 0.04 يوميا
    معدل تقييم المستوى : 4
    التقييم : Array
    شكراً و أعجبني للمشاركة
    المحادثة: 0
    علو الهمة غير متواجد حالياً




    الله يعطيك العافية مهتدس عبد الله تم تنويل برنامج Eclips وقبلها كنت منزلة الجافا و JDK

    بانتظار التطبيق بإذن الله تعالى


     





  11. رقم #11
     افتراضي  العنوان : رد: دورة: تطوير تطبيقات Android
    كاتب الموضوع : A.alfadhel
    بتاريخ : 06-02-2012 الساعة : 12:47 AM

    • الإداريين •


    الصورة الرمزية Nasser

    رقم العضوية : 4695
    الانتساب : Mar 2010
    المشاركات : 904
    بمعدل : 1.15 يوميا
    معدل تقييم المستوى : 500
    التقييم : Array
    شكراً و أعجبني للمشاركة
    المحادثة: 0
    Nasser متواجد حالياً




    يعطيك العافية مهندس تم التطبيق و في انتظار بقية الدروس

    الف شكر لك

    تحياتي
    ]Nasser[


    توقيـــع : Nasser
    يكفي المرء احساسه وايمانه بقدراته اما من ينتظر ان يقيمه الاخرون فلا شك انه سوف يعاني كثيراً .قيمة الانسان فيما يصنع وليس فيما يتحدث به الاخرون الذين لا يفهمون ان الاساءة للانسان الكريم لا تدميه . بل ترفعه عاليا مثل الشجره المثمره ترمى بالحجاره فلا يؤذيها ان الثمر الناضج يسقط على الارض اذ انها تعرف اي خير وعطاء يكمن فيها .....
    للكاتب : علي حمزه علي


     





  12. رقم #12
     افتراضي  العنوان : الدرس الخامس : تثبيت ADT - Android Developer Tools
    كاتب الموضوع : A.alfadhel
    بتاريخ : 06-02-2012 الساعة : 05:00 PM

    Sin. Java Developer

    الصورة الرمزية A.alfadhel

    رقم العضوية : 12176
    الانتساب : Jan 2012
    المشاركات : 63
    بمعدل : 0.44 يوميا
    معدل تقييم المستوى : 1
    التقييم : Array
    شكراً و أعجبني للمشاركة
    المحادثة: 0
    A.alfadhel غير متواجد حالياً





    الدرس الخامس : تثبيت ADT - Android Developer Tools
    خطوات تثبيت ADT - Android Developer Tools

    ملاحظة: يجب المرور على هذه المواضيع قبل البدء.
    1. تجهيز بيئة العمل Java JDK هنا
    2. تثبيت و إعداد Eclipse IDE هنا

    الخطوات

    1. تشغيل تطبيق eclipse.



    2. نذهب الى قائمة Help > Install New Software



    3. نقوم بالضغط على زر Add



    4. في مربع Location نكتب https://dl-ssl.google.com/android/eclipse/



    5. في قائمة الاضافات نحدد Developer Tools.



    6. نكمل بالضغط على Next.



    7. هنا نحتاج الموافقة على الرخص لاتمام العملية. (يجب قراءة الرخص)



    8. في نافذة التحذير الامني نضغط على زر OK.



    9. هنا نضغط على زر Restart Now سيقوم باعادة تشغيل تطبيق eclipse.





    10. بعد اعادة التشغيل ستظهر شاشة تطلب باعداد حزمة المطورين SDK.



    هنا يمكن تحديد : تثبيت آخر اصدارة 4.0 او تثبيت اصدارة 2.1 التي تدعمها اغلب اجهزة Android.

    11. هنا يكمل المعالج جلب معلومات حزمة المطوررين SDK.





    12. هنا نحتاج الموافقة على الرخص لاتمام العملية.



    أخر خطوة هي الضغط على زر Install.


    تمت العلملية بنجاح.

    الخطوة القادمة هي المشروع.


     





  13. رقم #13
     افتراضي  العنوان : رد: دورة: تطوير تطبيقات Android
    كاتب الموضوع : A.alfadhel
    بتاريخ : 07-02-2012 الساعة : 10:37 AM

    .: جامعي جديد :.

    الصورة الرمزية المشكاة

    رقم العضوية : 7740
    الانتساب : Dec 2010
    المشاركات : 12
    بمعدل : 0.02 يوميا
    معدل تقييم المستوى : 2
    التقييم : Array
    شكراً و أعجبني للمشاركة
    المحادثة: 0
    المشكاة غير متواجد حالياً




    الله يعطيك العااافية على الشرح

    متابع


     





  14. رقم #14
     افتراضي  العنوان : مشروع Java: دليل الاسماء Android
    كاتب الموضوع : A.alfadhel
    بتاريخ : 07-02-2012 الساعة : 05:15 PM

    Sin. Java Developer

    الصورة الرمزية A.alfadhel

    رقم العضوية : 12176
    الانتساب : Jan 2012
    المشاركات : 63
    بمعدل : 0.44 يوميا
    معدل تقييم المستوى : 1
    التقييم : Array
    شكراً و أعجبني للمشاركة
    المحادثة: 0
    A.alfadhel غير متواجد حالياً




    مشروع Java: دليل الاسماء Android

    الفكرة
    برنامج لحفظ الاسماء مع رقم الهاتف والبريد الالكتروني والعنوان.

    الشكل المقترح
    الشاشة الرئيسية



    شاشة تحتوي قائمة بجميع اسماء الاشخاص عند الضغط على الاسم تعرض الشاشة الثانية التي تمكننا من تعديل بيانات الشخص.
    كما تحتوي قائمة من الخيارات كـ اضافة (Add) و بحث (Search) واعدادات (Settings).

    شاشة الاضافة والتعديل



    شاشة تحتوي نموذج (مجموعة من مربعات الادخال) تحتوي الاسم الاول والاسم الاخير ورقم الهاتف والبريد الالكتروني والعنوان وكما تحتوي زري الحفظ (Save) والالغاء (Discard).


    الخطوط الرئيسية للمشروع
    بناءا على التصور السابق سنستخدم في هذا المشروع:
    • قاعدة بيانات SQLite.
    • واجهات XML.
    • قوائم خيارات XML.
    • عناصر Activity و ListActivity.
    • Views مكونات الواجهة: ListView, TextView, EditText, Button.
    • Intents: لارسال البيانات بين الشاشة الرئيسية وشاشة التعديل.

    Class Diagram



    ERD



    البدء في كتابة التطبيق

    تشغيل eclipse.


    انشاء مشروع Android من قائمة File>New>Other.


    اختر Android Project.


    اكتب اسم المشروع Project Name.


    نختار اصدارة 2.1 حزمة التطوير هي نفسها اصدارة النظام.


    اكتب البيانات.

    Application Name: اسم التطبيق Address Book
    Package Name: اسم الحزمة سمها ما تشاء. انا اخترت abdullah.android.addressbook
    Create Activity: ضع الاسم MainActivity الذي سيمثل الشاشة الرئيسية للتطبيق.
    Minimum SDK: اقل اصدارة من النظام التي يمكن ان يعمل عليها التطبيق.

    الان تم انشاء مشروع تطبيق Android.

    وصف محتويات مجلد التطبيق

    src: يحتوي Java source.
    gen: يحتوي حزمة منشأة بصورة تلقائية بواسطة حزمة التطوير تحتوي R.java وهو ملف مرجعي للربط بين Java source و مصادر Android.
    Android 2.1: مكتبة النظام.
    assets: ملفات تحتجها في التطبيق لا ترغب في ان يمسها شيء مثل ملفات الصوت والخطوط.
    bin: مجلد يجمع جميع المخرجات كحزمة التطبيق apk.
    res: مجلد يحتوي على جميع مصادر Android.
    res > drawable: مجلد يحتوي على الصور.PNG, JPEG, or GIF
    res > menu: مجلد يحتوي ملفات XML لبناء القوائم.
    res > layout: مجلد يحتوي الواجهات.
    res > values: مجلد يحتوي القيم كالمسميات والرسائل يستفاد منه في جعل التطبيق يدعم اكثر من لغة.
    AndroidManifest.xml: ملف اعداد التطبيق.


    بداية

    أولا: Model
    يكتب بناءا على UML Class Diagram الذي يحتوي Class واحد اسمه Contact. سيكون تحت حزمة جديدة اسمها abdullah.android.addressbook.model

    طريقة انشاء حزمة جديدة
    طريقة انشاء Class جديد

    Contact.java
    كود:
    package abdullah.android.addressbook.model;
    
    public class Contact {
    	//contact id
    	private long id;
    	//contact first name
    	private String firstName;
    	//contact last name
    	private String lastName;
    	//contact phone no.
    	private String phoneNo;
    	//contact email
    	private String email;
    	//contact address
    	private String address;
    	public Contact() {
    	}
    	public long getId() {
    		return id;
    	}
    	public void setId(long id) {
    		this.id = id;
    	}
    	public String getFirstName() {
    		return firstName;
    	}
    	public void setFirstName(String firstName) {
    		this.firstName = firstName;
    	}
    	public String getLastName() {
    		return lastName;
    	}
    	public void setLastName(String lastName) {
    		this.lastName = lastName;
    	}
    	public String getPhoneNo() {
    		return phoneNo;
    	}
    	public void setPhoneNo(String phoneNo) {
    		this.phoneNo = phoneNo;
    	}
    	public String getEmail() {
    		return email;
    	}
    	public void setEmail(String email) {
    		this.email = email;
    	}
    	public String getAddress() {
    		return address;
    	}
    	public void setAddress(String address) {
    		this.address = address;
    	}
    	/**
    	 * @param obj the object that you want to compare it with this object.<br/>
    	 * @return if obj equals this object.
    	 */
    	@Override
    	public boolean equals(Object obj) {
    		if (this == obj)
    			return true;
    		if (obj == null)
    			return false;
    		if (getClass() != obj.getClass())
    			return false;
    		Contact other = (Contact) obj;
    		if (id != other.id)
    			return false;
    		return true;
    	}
    }

    ثانيا: قاعدة البيانات
    نكتب class جديد من SQLiteOpenHelper اسمه MySQLiteHelper وسيكون المسؤول عن انشاء قاعدة البيانات المزيد.
    سيكون تحت حزمة abdullah.android.addressbook

    طريقة انشاء Class جديد

    MySQLiteHelper.java
    كود:
    package abdullah.android.addressbook;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.util.Log;
    
    public class MySQLiteHelper extends SQLiteOpenHelper {
    	//Table name
    	public static final String TABLE_CONTACTS = "contact_table";
    	//Table columns
    	public static final String COLUMN_ID = "_id";
    	public static final String COLUMN_FIRST_NAME = "first_name";
    	public static final String COLUMN_LAST_NAME = "last_name";
    	public static final String COLUMN_PHONE_NO = "phone_no";
    	public static final String COLUMN_EMAIL = "email";
    	public static final String COLUMN_ADDRESS = "address";
    	//Database file name
    	private static final String DATABASE_NAME = "address_book.db";
    	//Database version
    	private static final int DATABASE_VERSION = 1;
    
    	// Database creation sql statement
    	private static final String DATABASE_CREATE = "create table "
    			+ TABLE_CONTACTS + "( " + COLUMN_ID
    			+ " integer primary key autoincrement, " 
    			+ COLUMN_FIRST_NAME + " text not null, "
    			+ COLUMN_LAST_NAME + " text, "
    			+ COLUMN_PHONE_NO + " text, "
    			+ COLUMN_EMAIL + " text, "
    			+ COLUMN_ADDRESS + " text "
    			+ ");";
    	
    	public MySQLiteHelper(Context context) {
    		super(context, DATABASE_NAME, null, DATABASE_VERSION);
    	}
    	/** Called on first creation of the database. */
    	@Override
    	public void onCreate(SQLiteDatabase database) {
    		database.execSQL(DATABASE_CREATE);
    	}
    	/** Called when the DATABASE_VERSION is changed to higher version */
    	@Override
    	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    		Log.w(MySQLiteHelper.class.getName(),
    				"Upgrading database from version " + oldVersion + " to "
    						+ newVersion + ", which will destroy all old data");
    		db.execSQL("DROP TABLE IF EXISTS" + TABLE_CONTACTS);
    		onCreate(db);
    	}
    }
    سيكون معتمدا على ERD الموجود في بداية الموضوع.

    نكتب class اخر سيتعامل مع بيانات قاعدة البيانات كالاضافة والتعديل والحذف وجلب البيانات سيكون اسمه ContactDataSource تحت نفس الجزمة abdullah.android.addressbook

    طريقة انشاء Class جديد

    ContactDataSource.java
    كود:
    package abdullah.android.addressbook;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import abdullah.android.addressbook.model.Contact;
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.SQLException;
    import android.database.sqlite.SQLiteDatabase;
    
    public class ContactDataSource {
    	// SQLite Database object
    	private SQLiteDatabase database;
    	// Our SQLiteOpenHelper
    	private MySQLiteHelper dbHelper;
    	//Database columns
    	private String[] allColumns = { MySQLiteHelper.COLUMN_ID,
    			MySQLiteHelper.COLUMN_FIRST_NAME, MySQLiteHelper.COLUMN_LAST_NAME,
    			MySQLiteHelper.COLUMN_PHONE_NO, MySQLiteHelper.COLUMN_EMAIL,
    			MySQLiteHelper.COLUMN_ADDRESS};
    	
    	public ContactDataSource(Context context){
    		dbHelper = new MySQLiteHelper(context);
    	}
    	/** Used to open connection with database. */
    	public void open() throws SQLException {
    		database = dbHelper.getWritableDatabase();
    	}
    	/** Used to close connection with database. */
    	public void close() {
    		dbHelper.close();
    	}
    	/** Add new Contact to Database. */
    	public Contact createContact(Contact contact) {
    		//Used to store data like : COLUMN_NAME , VALUE.
    		ContentValues values = new ContentValues();
    		values.put(MySQLiteHelper.COLUMN_FIRST_NAME, contact.getFirstName());
    		values.put(MySQLiteHelper.COLUMN_LAST_NAME, contact.getLastName());
    		values.put(MySQLiteHelper.COLUMN_PHONE_NO, contact.getPhoneNo());
    		values.put(MySQLiteHelper.COLUMN_EMAIL, contact.getEmail());
    		values.put(MySQLiteHelper.COLUMN_ADDRESS, contact.getAddress());
    		//Insert new contact and get the id of it.
    		long insertId = database.insert(MySQLiteHelper.TABLE_CONTACTS, null,
    				values);
    		//To show how to query (To get contact by it id).
    		Cursor cursor = database.query(MySQLiteHelper.TABLE_CONTACTS,
    				allColumns, MySQLiteHelper.COLUMN_ID + " = " + insertId, null,
    				null, null, null);
    		//Move Cursor to the first row.
    		cursor.moveToFirst();
    		return cursorToContact(cursor);
    	}
    	/** Update Contact in Database. */
    	public Contact updateContact(Contact contact) {
    		//Used to store data like : COLUMN_NAME , VALUE.
    		ContentValues values = new ContentValues();
    		values.put(MySQLiteHelper.COLUMN_FIRST_NAME, contact.getFirstName());
    		values.put(MySQLiteHelper.COLUMN_LAST_NAME, contact.getLastName());
    		values.put(MySQLiteHelper.COLUMN_PHONE_NO, contact.getPhoneNo());
    		values.put(MySQLiteHelper.COLUMN_EMAIL, contact.getEmail());
    		values.put(MySQLiteHelper.COLUMN_ADDRESS, contact.getAddress());
    		database.update(MySQLiteHelper.TABLE_CONTACTS, values, MySQLiteHelper.COLUMN_ID + "=" + contact.getId(), null);
    		//To show how to query (To get contact by it id).
    		Cursor cursor = database.query(MySQLiteHelper.TABLE_CONTACTS,
    				allColumns, MySQLiteHelper.COLUMN_ID + " = " + contact.getId(), null,
    				null, null, null);
    		//Move Cursor to the first row.
    		cursor.moveToFirst();
    		return cursorToContact(cursor);
    	}
    	/** Delete Contact from Database. */
    	public void deleteContact(Contact contact) {
    		System.out.println("Contact deleted with id: " + contact.getId());
    		//Delete contact by it id.
    		database.delete(MySQLiteHelper.TABLE_CONTACTS, MySQLiteHelper.COLUMN_ID
    				+ " = " + contact.getId(), null);
    	}
    	/** Get all Contacts from Database. */
    	public List<Contact> getAllContacts() {
    		//Used to store all contacts.
    		List<Contact> comments = new ArrayList<Contact>();
    		Cursor cursor = database.query(MySQLiteHelper.TABLE_CONTACTS,
    				allColumns, null, null, null, null, null);
    		//Move Cursor to the first row.
    		cursor.moveToFirst();
    		while (!cursor.isAfterLast()) {
    			Contact contact = cursorToContact(cursor);
    			comments.add(contact);
    			//Move Cursor to the next row.
    			cursor.moveToNext();
    		}
    		// Make sure to close the cursor
    		cursor.close();
    		return comments;
    	}
    	/** Used to get contact by it id. */
    	public Contact getContact(long id){
    		Cursor cursor = database.query(MySQLiteHelper.TABLE_CONTACTS,
    				allColumns, MySQLiteHelper.COLUMN_ID + " = " + id, null,
    				null, null, null);
    		cursor.moveToFirst();
    		return cursorToContact(cursor);
    	}
    	/** Used to get contact data from Cursor to Contact Object. */
    	private Contact cursorToContact(Cursor cursor) {
    		Contact contact = new Contact();
    		contact.setId(cursor.getLong(0));
    		contact.setFirstName(cursor.getString(1));
    		contact.setLastName(cursor.getString(2));
    		contact.setPhoneNo(cursor.getString(3));
    		contact.setEmail(cursor.getString(4));
    		contact.setAddress(cursor.getString(5));
    		return contact;
    	}
    }
    ثالثا: الواجهات ستكون تحت res>layout
    بناءا على الشكل مقترح في بداية الموضوع سيكون لدينا واجهتين هما:

    الواجهة الرئيسية
    ستكون واجهة تعرض جميع الاسماء.
    لذلك سنستخدم ListView ستعرض جميع الاسماء الموجودة في قاعدة بيانات التطبيق.
    سنسميها main.xml. ملاحظة: هذا الملف قد يكون موجود مسبقا لذلك يمكن ان نقوم بتعديله.

    طريقة انشاء ملف Android XML (واجهة) جديد

    main.xml
    كود:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
        <!-- Used to view list of all contacts -->
        <ListView
            android:id="@android:id/list"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
    بما اننا سنتخدم ListView التي ستحتوي مجموعة من View سنحتاج واجهة لهذه الـ View.
    سنعرض فيها الاسم الكامل ورقم الهاتف وصورة.

    طريقة انشاء ملف Android XML (واجهة) جديد

    contact_list_item.xml
    كود:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:paddingTop="4dp"
        android:paddingRight="8dp"
        android:paddingBottom="4dp"
        android:paddingLeft="8dp">
        <!-- Left side of the view contains Contact Full Name and Contact Phone No.  -->
    	<LinearLayout android:layout_width="fill_parent"
    	    android:layout_height="fill_parent"
    	    android:orientation="vertical"
    	    android:layout_weight="1">
    	    <TextView android:id="@+id/contact_name_txt"
    	        android:layout_width="fill_parent"
    	        android:layout_height="wrap_content"
    	        style="@android:style/TextAppearance.Large"
    	        android:text="Name"/>
    	    <TextView android:id="@+id/contact_phone_txt"
    	        android:layout_width="fill_parent"
    	        android:layout_height="wrap_content"
    	        style="@android:style/TextAppearance.Small"
    	        android:text="Phone No."/>
    	</LinearLayout>
    	<!-- Right side of the view contains Image -->
    	<ImageView android:layout_width="48dp" android:layout_height="48dp"
    	    android:src="@drawable/p_team_logo"/>
    </LinearLayout>
    واجهة التعديل
    ستحتوي مربعات نص للاسم ورقم الهاتف والبريد الالكتروني والعنوان وزي حفظ والغاء.

    طريقة انشاء ملف Android XML (واجهة) جديد

    edit_contact.xml
    كود:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical">
        <!-- ScrollView contains EditText because if the phone screen is small the view well have scroll bar. -->
        <ScrollView android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1">
    	        <LinearLayout 
    		    android:layout_width="fill_parent"
    		    android:layout_height="wrap_content"
    		    android:orientation="vertical" >
    		    <LinearLayout android:layout_width="fill_parent"
    		        android:layout_height="wrap_content">
    		        <ImageView android:layout_width="wrap_content"
    		            android:layout_height="wrap_content"
    		            android:src="@drawable/p_team_logo"/>
    		    </LinearLayout>
    			<LinearLayout android:layout_width="fill_parent"
    			    android:layout_height="wrap_content">
    		        <!-- EditText (TextBox) for First Name -->
    			    <EditText android:id="@+id/contact_first_name_txt"
    			        android:layout_width="fill_parent"
    			        android:layout_height="wrap_content"
    			        android:layout_weight="1"
    			        android:singleLine="true"
    			        android:hint="First Name"/>
    			    <!-- EditText (TextBox) for Last Name -->
    			    <EditText android:id="@+id/contact_last_name_txt"
    			        android:layout_width="fill_parent"
    			        android:layout_height="wrap_content"
    			        android:layout_weight="1"
    			        android:singleLine="true"
    			        android:hint="Last Name"/>
    			</LinearLayout>
    			<!-- EditText (TextBox) for Phone No. -->
    			<EditText android:id="@+id/contact_phone_no_txt"
    			    android:layout_width="fill_parent"
    			    android:layout_height="wrap_content"
    			    android:singleLine="true"
    			    android:inputType="phone"
    			    android:hint="Phone No."/>
    			<!-- EditText (TextBox) for Email -->
    			<EditText android:id="@+id/contact_email_txt"
    			    android:layout_width="fill_parent"
    			    android:layout_height="wrap_content"
    			    android:singleLine="true"
    			    android:inputType="textEmailAddress"
    			    android:hint="Email"/>
    			<!-- EditText (TextBox) for Address -->
    			<EditText android:id="@+id/contact_address_txt"
    			    android:layout_width="fill_parent"
    			    android:layout_height="wrap_content"
    			    android:singleLine="true"
    			    android:maxLines="4"
    			    android:inputType="textMultiLine"
    			    android:hint="Address"/>
    		</LinearLayout>
        </ScrollView>
        
    	<LinearLayout android:layout_width="fill_parent"
    	    android:layout_height="wrap_content">
    	    <!-- Discard Button -->
    	    <Button android:id="@+id/discard_btn"
    	        android:layout_width="fill_parent"
    	        android:layout_height="wrap_content"
    	        android:layout_weight="1"
    	        android:text="Discard"/>
    	    <!-- Save Button -->
    	    <Button android:id="@+id/save_btn"
    	        android:layout_width="fill_parent"
    	        android:layout_height="wrap_content"
    	        android:layout_weight="1"
    	        android:text="Save"/>
    	</LinearLayout>
    </LinearLayout>
    رابعا: القوائم Menus ستكون تحت res>menu
    سيكون لكل واجهة قائمة كالتالي:

    الواجهة الرئيسية
    ستحتوي ثلاثة عناصر هي: الاضافة (لاضافة اسم جديد) و البحث (للبحث عن اسم) الاعدادات.

    طريقة انشاء ملف Android XML (قائمة) جديد

    main_menu.xml
    كود:
    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android" >
        <item android:id="@+id/add_contact_option" android:title="Add"/>
        <item android:id="@+id/search_option" android:title="Search"/>
        <item android:id="@+id/settings_option" android:title="Settings"/>
    </menu>

    واجهة التعديل
    ستحتوي عنصر واحد هو الحذف.

    طريقة انشاء ملف Android XML (قائمة) جديد

    edit_menu.xml
    كود:
    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android" >
        <item android:id="@+id/delete_contact_option" android:title="Delete"/>
    </menu>

    خامسا: صور ستكون تحت res>drawable
    انا استخدم صورة واحدة p_team_logo.png

    استخدمتها في الواجهات السابقة

    ملاحظة: يلاحظ انه لا يوجد مجلد اسمه drawable بل يوجد مجلدات آخرى كالتالي:
    drawable-hdpi: للشاشات عالية الدقة كـ SAMSUNG Galaxy (S, SII, R) واغلب الاجهزة.
    drawable-mdpi: للشاشات متوسطة الدقة كـ HTC (Dream, Magic Hero) وبعض الاجهزة.
    drawable-ldpi: للشاشات منخفظة الدقة كـ HTC Tatto و SAMSUNG Galaxy Ace.

    المرجع الكامل
    كما ان نفس الفكرة تنطبق على الواجهات layout.

    ملاحظة: طريقة اضافة الصور هي النسخ واللصق.

    سادسا: Activities جمع Activity
    لكل واجهة Activity. المرجع

    الواجهة الرئيسية
    سيكون اسمه MainActivity سيعرض فيه قائمة من الاسماء سنستخدم الواجهة main.xml.
    لاننا سنسخدم ListView في main.xml سنختار ListActivity بدلا من Activity لتخصصه في القوائم.

    طريقة انشاء Class جديد

    MainActivity.java
    كود:
    package abdullah.android.addressbook;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import abdullah.android.addressbook.model.Contact;
    import android.app.ListActivity;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.MenuInflater;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.BaseAdapter;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class MainActivity extends ListActivity {
    	//Our DataSource to work with database.
    	private ContactDataSource dataSource;
    	//Used to store all contacts to be used in ListView adapter.
    	private List<Contact> contacts = new ArrayList<Contact>();
    	//To be used as an adapter with ListView.
    	private ContactAdapter adapter;
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //Set layout main.xml
            setContentView(R.layout.main);
            //Create object from ContactDataSource.
            dataSource = new ContactDataSource(this);
            // Use the ContactAdapter to show the  elements in a ListView.
            adapter = new ContactAdapter(this);
            setListAdapter(adapter);
            //ListView is the ListView with android:id="@android:id/list" in the layout (main.xml). to get it you can call getListView()
            //Set OnItemClickListener triggers when user click any item (Contact) in the list.
            getListView().setOnItemClickListener(new OnItemClickListener() {
    			@Override
    			public void onItemClick(AdapterView<?> arg0, View v, int position,
    					long id) {
    				// Open EditActivity to edit the clicked Contact.
    				Intent editIntent = new Intent(MainActivity.this, EditActivity.class);
    				//Put the Contact id
    				editIntent.putExtra("id", id);
    				//Start EditActivity to edit the clicked Contact.
    				startActivity(editIntent);
    			}
    		});
        }
        /** Call after onCreate method. */
        @Override
        protected void onResume() {
        	super.onResume();
        	//Open database connection.
        	dataSource.open();
        	//Get all contacts.
        	contacts = dataSource.getAllContacts();
        	//Notify adapter that there is a change in contacts list.
        	adapter.notifyDataSetChanged();
        }
        /** Call after close activity */
        @Override
        protected void onStop() {
        	super.onStop();
        	//Close dataSource
        	dataSource.close();
        }
        /** Called when click Menu button. */
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) {
    		MenuInflater inflater = getMenuInflater();
    		//Generate menu from main_menu.xml menu.
    	    inflater.inflate(R.menu.main_menu, menu);
    	    return true;
    	}
    	/** Called when select option from menu. */
    	@Override
    	public boolean onOptionsItemSelected(MenuItem item) {
    		//Check witch option selected.
    		switch (item.getItemId()) {
    		case R.id.add_contact_option:
    			//Start EditActivity.
    			startActivity(new Intent(this, EditActivity.class));
    			return true;
    		case R.id.search_option:
    			Toast.makeText(this, "Search Option clicked.", Toast.LENGTH_SHORT);
    			return true;
    		case R.id.settings_option:
    			Toast.makeText(this, "Settings Option clicked.", Toast.LENGTH_SHORT);
    			return true;
    		default:
    			return super.onOptionsItemSelected(item);
    		}
    	}
    	//Adapter to handle ListView items (Contacts).
    	private class ContactAdapter extends BaseAdapter{
    		//Used to create view.
    		private LayoutInflater mInflater;
    		public ContactAdapter(Context context){
    			mInflater = LayoutInflater.from(context);
    		}
    		/** Get the adapter items (Contacts) count */
    		@Override
    		public int getCount() {
    			return contacts.size();
    		}
    		/** Get item (Contact) by position */
    		@Override
    		public Object getItem(int position) {
    			return contacts.get(position);
    		}
    		/** Get item (Contact) id by position */
    		@Override
    		public long getItemId(int position) {
    			return contacts.get(position).getId();
    		}
    		/** Get item (Contact) view by position */
    		@Override
    		public View getView(int position, View convertView, ViewGroup parent) {
    			//Create view from contact_list_item.xml layout.
    			if(convertView == null)
    				convertView = mInflater.inflate(R.layout.contact_list_item, null);
    			//Get TextView by it id (android:id)
    			TextView contactNameTxt = (TextView)convertView.findViewById(R.id.contact_name_txt);
    			TextView contactPhoneTxt = (TextView)convertView.findViewById(R.id.contact_phone_txt);
    			// 
    			Contact current = (Contact)getItem(position);
    			//Set Contact name.
    			contactNameTxt.setText(current.getFirstName() + " " + current.getLastName());
    			//Set Contact Phone No.
    			contactPhoneTxt.setText(current.getPhoneNo());
    			return convertView;
    		}
    		
    	}
    }

    واجهة التعديل
    الواجهة التي تمكننا من اضافة وتعديل وحذف الاسماء.

    طريقة انشاء Class جديد

    EditActivity.java
    كود:
    package abdullah.android.addressbook;
    
    import abdullah.android.addressbook.model.Contact;
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuInflater;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class EditActivity extends Activity {
    	//Our DataSource to work with database.
    	private ContactDataSource dataSource;
    	//Used to store Contact data.
    	private Contact contact;
    	/** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //Set layout edit_contact.xml
            setContentView(R.layout.edit_contact);
            //Create object from ContactDataSource.
            dataSource = new ContactDataSource(this);
            //Open database connection.
            dataSource.open();
            //When any other Activity sends any data we can found it in this object.
            Bundle b = this.getIntent().getExtras();
            if(b != null){
            	//Get the Contact by the sent id.
            	contact = dataSource.getContact(b.getLong("id"));
            }
            //Get EditText (Textbox) by android:id
            final EditText firstNameTxt = (EditText) findViewById(R.id.contact_first_name_txt);
            final EditText lastNameTxt = (EditText) findViewById(R.id.contact_last_name_txt);
            final EditText phoneNoTxt = (EditText) findViewById(R.id.contact_phone_no_txt);
            final EditText emailTxt = (EditText) findViewById(R.id.contact_email_txt);
            final EditText addressTxt = (EditText) findViewById(R.id.contact_address_txt);
            //Fill contact data in the EditText (Textbox).
            if(contact != null){
            	firstNameTxt.setText(contact.getFirstName());
            	lastNameTxt.setText(contact.getLastName());
            	phoneNoTxt.setText(contact.getPhoneNo());
            	emailTxt.setText(contact.getEmail());
            	addressTxt.setText(contact.getAddress());
            }
            //Get buttons
            final Button discardBtn = (Button) findViewById(R.id.discard_btn);
            final Button saveBtn = (Button) findViewById(R.id.save_btn);
            //Set OnClickListener for Save button.
            saveBtn.setOnClickListener(new OnClickListener() {
    			@Override
    			public void onClick(View v) {
    				if(contact == null)
    					contact = new Contact();
    				contact.setFirstName(firstNameTxt.getText().toString());
    				contact.setLastName(lastNameTxt.getText().toString());
    				contact.setPhoneNo(phoneNoTxt.getText().toString());
    				contact.setEmail(emailTxt.getText().toString());
    				contact.setAddress(addressTxt.getText().toString());
    				if(contact.getId() == 0){
    					contact = dataSource.createContact(contact);
    					Toast.makeText(EditActivity.this, "New contact added.", Toast.LENGTH_LONG).show();
    				}else{
    					contact = dataSource.updateContact(contact);
    					Toast.makeText(EditActivity.this, "Contact updated.", Toast.LENGTH_LONG).show();
    				}
    				finish();
    			}
    		});
            //Set OnClickListener for Discard button.
            discardBtn.setOnClickListener(new OnClickListener() {
    			@Override
    			public void onClick(View arg0) {
    				finish();
    			}
    		});
        }
        /** Call after close activity */
        @Override
        protected void onStop() {
        	super.onStop();
        	//Close dataSource
        	dataSource.close();
        }
        /** Called when click Menu button. */
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) {
    		//If contact is null this means we can't delete not saved to database Contact.
    		if(contact != null){
    			MenuInflater inflater = getMenuInflater();
    			//Generate menu from edit_menu.xml menu.
    		    inflater.inflate(R.menu.edit_menu, menu);
    		    return true;
    		}else
    			return super.onCreateOptionsMenu(menu);
    	}
    	/** Called when select option from menu. */
    	@Override
    	public boolean onOptionsItemSelected(MenuItem item) {
    		//Check witch option selected.
    		switch (item.getItemId()) {
    		case R.id.delete_contact_option:
    			//Delete current Contact
    			dataSource.deleteContact(contact);
    			Toast.makeText(EditActivity.this, "Contact deleted.", Toast.LENGTH_LONG).show();
    			finish();
    			return true;
    		default:
    			return super.onOptionsItemSelected(item);
    		}
    	}
    }
    سابعا: ملف AndroidManifest.xml
    ملف يحتوي اعدادات التطبيق

    نقوم بتسجيل Activity اللتي كتبناها كـ MainActivity و EditActivity

    AndroidManifest.xml
    كود:
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="abdullah.android.addressbook"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <application android:icon="@drawable/p_team_logo" android:label="@string/app_name">
            <!-- To use any Activity class we need to register it here. -->
            <!-- MainActivity -->
            <activity android:name=".MainActivity" android:label="@string/app_name" >
                <intent-filter>
                    <!-- This means this is the main activity -->
                    <action android:name="android.intent.action.MAIN" />
                    <!-- This means this activity well have a shortcut -->
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <!-- EditActivity -->
            <activity android:name=".EditActivity"/>
        </application>
    	<!-- This means this app well work with Android 2.1 (7) and later -->
        <uses-sdk android:minSdkVersion="7" />
            
    </manifest>

    ثامنا: التجربة والاختبار Debug
    لتجربة التطبيق نحتاج جهاز به نظام Android مع تفعيل خاصية USB Debugging. او Android Emulator.

    جهاز Android
    في حالة وجود جهاز Android يجب تفعيل الخاصيات التالية:

    Unknown sources
    Android 3.2 او اقدم
    Settings > Applications

    Android 4.0 او احدث
    Settings > Security


    USB Debugging
    لتفعيل الخاصية:
    Android 3.2 او اقدم
    Settings > Applications > Development

    Android 4.0 او احدث
    Settings > Developer options


    Android Emulator
    شرح طريقة العمل مع Android Emulator هنا.




    التعديل الأخير تم بواسطة A.alfadhel ; 08-02-2012 الساعة 09:45 PM سبب آخر: المزيد من التوضيح

     





  15. رقم #15
     افتراضي  العنوان : توضيحات eclipse
    كاتب الموضوع : A.alfadhel
    بتاريخ : 08-02-2012 الساعة : 09:01 PM

    Sin. Java Developer

    الصورة الرمزية A.alfadhel

    رقم العضوية : 12176
    الانتساب : Jan 2012
    المشاركات : 63
    بمعدل : 0.44 يوميا
    معدل تقييم المستوى : 1
    التقييم : Array
    شكراً و أعجبني للمشاركة
    المحادثة: 0
    A.alfadhel غير متواجد حالياً





    توضيحات eclipse

    انشاء حزمة جديدة
    هناك اربع طرق لفعل ذلك:
    1. عن طريق File > New > Package
    2. في شريط الادوات نضغط زر ثم نختار Package
    3. الزر الايمن من الفارة على المشروع نختار جديد ثم Package (في حالة عدم وجود Package نختار Other ثم في النافذة نبحث عن Package)
    4. في شريط الادوات نضغط زر

    نافذة انشاء حزمة جديدة




    انشاء Class جديد
    هناك اربع طرق لفعل ذلك:
    1. عن طريق File > New > Class
    2. في شريط الادوات نضغط زر ثم نختار Class
    3. الزر الايمن من الفارة على المشروع نختار جديد ثم Class (في حالة عدم وجود Class نختار Other ثم في النافذة نبحث عن Class)
    4. في شريط الادوات نضغط زر

    نافذة انشاء Class جديد




    انشاء ملف Android XML للقوائم والواجهات وغيرها
    1. عن طريق File > New > Android XML File
    2. في شريط الادوات نضغط زر ثم نختار Android XML File
    3. الزر الايمن من الفارة على المشروع نختار جديد ثم Android XML File (في حالة عدم وجود Android XML نختار Other ثم في النافذة نبحث عن Android XML)
    4. في شريط الادوات نضغط زر *

    نافذة انشاء ملف Android XML


    ملاحظة: بالامكان تغيير Resource Type الى واجهة (Layout) او قائمة (Menu) او اي عنصر آخر.
    المرجع الكامل


    التعديل الأخير تم بواسطة A.alfadhel ; 08-02-2012 الساعة 09:40 PM

     





معلومات الموضوع

الأعضاء الذين يشاهدون هذا الموضوع

الذين يشاهدون الموضوع الآن: 2 (0 من الأعضاء و 2 زائر)

     

وجد الزوار هذه الصفحة بالبحث عن:

Android Developer

android database tutorial

screen label for android application

SQLite

what is intent in android

asynctask android

javafx sdk windows 32-bit (exe)java.sql.sqlexception: asynctask where contact in android filesabdullah id tv androidabdullah id android JavaFX SDK Windows 32-bit (exe) listview android pdfandroid mysql creation menu projet android.pdfandroid sqlite android call you later listview android class diagram pdf android sqliteANDROID JDK 32bIT Right listview android

الكلمات الدلالية لهذا الموضوع

المفضلات

ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •