بدء نشاط آخر

الإعلانات

بدء نشاط آخر

 

بدء نشاط آخر

بعد إكمال الدرس السابق، سيكون لديك تطبيق يعرض نشاط (شاشة واحدة) يحتوي على مربع نص و زر.

في هذا الدرس، سوف تقوم بإضافة بعض الأكواد إلى MainActivity والتي تبدأ نشاط جديد لعرض الرسالة، عند قيام المستخدم بالضغط على زر الإرسال Send.

 

ملاحظة: هذا الدرس يفترض بأنك تستخدم الإصدار 3.0 من Android Studio أو أحدث.

 

 

 

 

الإستجابة لزر الإرسال


قم بإضافة دالة إلى فئة النشاط الرئيسي MainActivity والتي تستدعى بواسطة الزر كما يلي:

1- في الملف MainActivity > com.example.myfirstapp > java > app. قم بإضافة بقية دالة، إرسال رسالة ()sendMessage كما يلي:

KOTLIN

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    /** Called when the user taps the Send button */
    fun sendMessage(view: View) {
        // Do something in response to button
    }
}

JAVA

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /** Called when the user taps the Send button */
    public void sendMessage(View view) {
        // Do something in response to button
    }
}

قد ترى خطأ لأن Android Studio لا يمكنه حل فئة View المستخدمة كوسيط “معطى” للدالة. لذا ضع مؤشرك على إعلان View وقم بالضغط..

ثم قم بإجراء إصلاح سريع Quick Fix بالضغط على Alt + Enter ( أو Option + Enter على أجهزة ماك). (في حالة ظهور قائمة، إختار Import class).

 

2- الآن أرجع إلى الملف activity_main.xml لإستدعاء هذه الدالة من خلال الزر:

a. أضغط لإختيار الزر في محرر المخطط Layout Editor.

b. في نافذة السمات Attributes، حدد موقع الخاصية onClick ثم اختار

[sendMessage [MainActivity من القائمة المنسدلة.

الآن عند النقر على الزر، يقوم النظام بإستدعاء الدالة ()sendMessage.

لاحظ التفاصيل الموجودة في هذه الدالة، والمطلوبة لكي يتعرف النظام عليها، على إنها متوافقة مع السمة android:onClick.

خاصة، الدالة التي لديها الخصائص التالية:

  • وصول عام.
  • فارغة “void”، أو بلغة Kotlin، قيمة إرجاع وحدة ضمنية.
  • معاينه View كالمعامل “معطى” الوحيد (وهو كائن المعاينة View الذي تم الضغط عليه).

تالياً، سوف تقوم بملء هذه الدالة، لقراءة محتويات حقل النص، وتسليم هذا النص إلى نشاطٍ آخر.

 

 

 

 

 

بدء نشاط آخر

 

إنشاء غرض


 

الغرض عبارة عن كائن، يوفر عملية ربط بين مكونات منفصلة، أثناء وقت التشغيل، مثل نشاطين. الغرض يمثل “غرض يؤدي عملٍ ما” من أجل التطبيق.

يمكنك إستخدام الأغراض لمجموعة هائلة من المهام، ولكن في هذا الدرس، سيقوم غرضك ببدء نشاطٍ آخر.

في النشاط الرئيسي MainActivity، قم بإضافة الثابت EXTRA_MESSAGE، والكود ()sendMessage كما هو موضح هنا:

KOTLIN

const val EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE"

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    /** Called when the user taps the Send button */
    fun sendMessage(view: View) {
        val editText = findViewById<EditText>(R.id.editText)
        val message = editText.text.toString()
        val intent = Intent(this, DisplayMessageActivity::class.java).apply {
            putExtra(EXTRA_MESSAGE, message)
        }
        startActivity(intent)
    }
}

JAVA

public class MainActivity extends AppCompatActivity {
    public static final String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /** Called when the user taps the Send button */
    public void sendMessage(View view) {
        Intent intent = new Intent(this, DisplayMessageActivity.class);
        EditText editText = (EditText) findViewById(R.id.editText);
        String message = editText.getText().toString();
        intent.putExtra(EXTRA_MESSAGE, message);
        startActivity(intent);
    }
}

 

مجدداً يواجه Android Studio أخطاء رموز لا يمكنه حلها “Cannot resolve symbol”، لذا أضغط على

Alt + Enter (أو Option + Return على أجهزة ماك). 

في النهاية يجب أن يبدو إستيرادك كما يلي:

KOTLIN

import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.EditText

JAVA

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

سوف يبقى هناك خطأ لـDisplayMessageActivity، لكن لا بأس بذلك، سوف تصلح هذا في القسم التالي.

إليك ما يحدث في ()sendMessage:

    • بنية الغرض تأخذ معاملين “باراميتر”:

– السياق Context كمعامل أول (this تستخدم لأن فئة النشاط عبارة عن فئة فرعية من السياق).

– الفئة Class الخاصة بمكون التطبيق، والذي يجب على النظام تسليم الغرض إليه (في هذه الحاله، النشاط الذي يجب أن يبدأ).

  • الدالة ()putExtra تضيف قيمة EditText إلى الغرض. يمكن للغرض أن يحمل أنواع البيانات كأزواج “قيمة\مفتاح” والتي تسمى إضافات.

مفتاحك عبارة عن ثابت عام EXTRA_MESSAGE، لأن النشاط التالي سوف يستخدم المفتاح لإستيراد قيمة النص.

من الممارسات الجيدة، تعريف المفاتيح لإضافات الغرض، والتي تستخدم اسم حزمة تطبيقك كبادئة.

وهذا يضمن أن تكون المفاتيح فريدة، في حال تفاعل تطبيقك مع تطبيقات أخرى.

 

  • تقوم الدالة ()startActivity ببدأ مثيل من DisplayMessageActivity المحددة بواسطة الغرض. تحتاج الآن إلى إنشاء تلك الفئة.
مكون بنية التنقل، الموجود حالياً في المرحلة الأولية “الفا”، يتيح لك إستخدام محرر التنقل، لربط نشاط بنشاطٍ آخر. 

بمجرد إنشاء العلاقه، يمكنك إستخدام واجهة برمجة التطبيقات (API)، لبدء النشاط الثاني، عندما يقوم المستخدم بتشغيل الإجراء المرتبط به (من خلال.. الضغط على زر، كمثال).

لمعرفة المزيد، راجع مكون بنية التنقل.

 

 

 

 

 

 

بدء نشاط آخر

 

إنشاء النشاط الثاني


1- في نافذة المشروع Project، اضغط بزر الماوس الأيمن على مجلد التطبيق app، ثم اختار

New > Activity > Empty Activity.

2- في نافذة تكوين النشاط Configure Activity، قم بكتابة “DisplayMessageActivity” لأسم النشاط Activity Name، ثم اضغط على إنهاء Finish ( أترك بقية الخصائص كما هي، على الإعدادات الإفتراضية).

سوف يقوم Android Studio تلقائياً بفعل ثلاثة أمور:

  • ينشئ ملف DisplayMessageActivity.
  • ينشئ ملف المخطط activity_display_message.xml المطابق.
  • يضيف عنصر النشاط <activity> المطلوب، في AndroidManifest.xml.

إذا قمت بتشغيل التطبيق ونقرت على الزر الموجود في النشاط الأول، سوف يبدأ النشاط الثاني ولكنه سيكون فارغاً. وهذا لأن النشاط الثاني يستخدم مخطط فارغ، والذي يوفره القالب.

 

 

 

إضافة معاينة نص


النشاط الجديد يحتوي على ملف مخطط فارغ، لذا سوف تقوم الآن بإضافة معاينة نص text view، حيث ستظهر الرسالة.

1- افتح الملف app > res > layout > activity_display_message.xml.

الشكل 1. معاينة النص في المركز العلوي من المخطط.

 

2- اضغط على Turn On Autoconnect في شريط الأدوات (يجب أن يتم تمكينها بعد ذلك، كما هو موضح في الشكل 1).

3- في نافذة Palette، اضغط على Text ثم اسحب TextView إلى المخطط — ثم قم بإفلاته بالقرب من المركز العلوي للمخطط..

بحيث يستقر على الخط العمودي الذي يظهر. يقوم الإتصال التلقائي بإضافة قيود في الجانبين الأيمن و الأيسر لوضع المعاينة في المركز “المنتصف” الأفقي.

قم بإنشاء قيد آخر من أعلى text view إلى أعلى المخطط، لكي تظهر كما هو موضح في الشكل 1.

إختيارياً، قم بإجراء بعض التعديلات على نمط النص،من خلال توسيع textAppearance في نافذة السمات Attributes وتغيير سمات مثل textSize و textColor.

 

 

 

 

 

عرض الرسالة


سوف تقوم الآن بتعديل النشاط الثاني، لعرض الرسالة التي تم تمريرها بواسطة النشاط الأول.

1- في DisplayMessageActivity قم بإضافة الكود التالي إلى دالة ()onCreate:

KOTLIN

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_display_message)
    
    // Get the Intent that started this activity and extract the string
    val message = intent.getStringExtra(EXTRA_MESSAGE)

    // Capture the layout's TextView and set the string as its text
    val textView = findViewById<TextView>(R.id.textView).apply {
        text = message
    }
}

JAVA

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_display_message);
    
    // Get the Intent that started this activity and extract the string
    Intent intent = getIntent();
    String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

    // Capture the layout's TextView and set the string as its text
    TextView textView = findViewById(R.id.textView);
    textView.setText(message);
}

2- أضغط Alt + Enter (أو Option + Return في أجهزة ماك)، لإستيراد الفئات المفقودة. في النهاية يجب أن يظهر إستيرادك كما يلي:

KOTLIN

import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView

JAVA

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

 

 

 

 

إضافة تنقل علوي


كل شاشة في تطبيقك، والتي ليست عبارة عن نقطة دخول أساسيه ( جميع الشاشات التي ليست الشاشة “الرئيسية”)..

يجب أن توفر ميزة التنقل لكي يتمكن المستخدم من الرجوع إلى الشاشة الرئيسية في التسلسل الهرمي للتطبيق، من خلال الضغط على زر “الأعلى\UP” في شريط التطبيق.

كل ما عليك فعله هو الإعلان عن النشاط الأساسي، في ملف AndroidManifest.xml.

لذا افتح الملف app > manifests > AndroidManifest.xml، اعثر على العلامه <activity> الخاصة بـ DisplayMessageActivity وقم بإستبدالها بما يلي:

<activity android:name=".DisplayMessageActivity"
          android:parentActivityName=".MainActivity">
    <!-- The meta-data tag is required if you support API level 15 and lower -->
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainActivity" />
</activity>

يقوم نظام اندرويد الآن بإضافة زر “اعلى” تلقائياً في شريط التطبيق. بدء نشاط آخر

 

 

 

 

تشغيل التطبيق


الآن قم بتشغيل التطبيق مرة أخرى، من خلال الضغط على قبول التغييرات Apply Changes في شريط الأدوات.

عندما يفتح، قم بكتابة رسالة في حقل النص، ثم أضغط إرسال Send لكي ترى الرسالة تظهر في النشاط الثاني.

الشكل 2. لقطات شاشة لكلا النشاطين.

 

 

هذا كل شيء، لقد قمت بإنشاء أول تطبيق اندرويد خاص بك!

لمتابعة تعلم أساسيات تطوير تطبيقات الاندرويد، اتبع الروابط الأخرى المتوفرة في الصفحة الأولى لهذه الدروس.


للإطلاع على المقال باللغة الإنجليزية أضغط هنا.

الإعلانات

اترك رد