القائمة الرئيسية

الصفحات

الإنتقال بين الأنشطة تبادل المعلومات في تطبيقات أندرويد ستوديو

 

الإنتقال بين الأنشطة تبادل المعلومات

في تطبيقات أندرويد ستوديو


الإنتقال بين الأنشطة (Activities) تبادل المعلومات في تطبيقات أندرويد ستوديوالإنتقال بين الأنشطة (Activities) تبادل المعلومات في تطبيقات أندرويد ستوديو



1.     مقدمة

التطبيق قد تكون فيه عدة أقسام و نريد كل قسم مستقلا على الآخر فهنا لا بد أن يصبح التطبيق مؤلفا من عدة أنشطة Activities، في هذا الموضوع سنتطرق إلى الإنتقال من نشاط إلى آخر و كذلك تبادل المعلومات.

 

2.     الإنتقال بين الأنشطة Activities

يمكن الإنتقال بين الأنشطة و تبادل المعلومات، و نجد أربع أحتمالات في تبادل المعلومات و هي:

·       لا يوجد إرسال بيانات و لا إرجاع.

·       يوجد إرسال بيانات بدون إرجاع.

·       لا يوجد إرسال بيانات و يوجد إرجاع.

·       يوجد إرسال بيانات و يوجد إرجاع.

 

لدراسة كل هذه الإحتمالات سنحتاج أن يكون التطبيق فيه 3 أنشطة Activities، واحدة ننطلق منها و الإثنتان نذهب لهما، كما أننا لكي نبين التواصل بين الأنشطة نقوم بتقديم أمثلة.

نسمي الإنشطة في المثال : MainActivity،   Main2Activity، Main3Activity

 

3. الإنتقال من نشاط إلى آخر دون إرسال أو إرجاع

هذا هو أبسط شكل بحيث يعرض النشاط الثاني و نحتاج للتعليمات التالية:

Intent secondact = new Intent(MainActivity.this, SecondActivity.class);
startActivity(secondact);

 

يمكن أن ضعهما في إجراء ينفذ عند الضغط على زر:

public void AfficheSecondAct(View v){

    Intent secondact = new Intent(MainActivity.this, SecondActivity.class);

    startActivity(secondact);
}

 

 

4. الإنتقال من نشاط إلى آخر مع الإرسال و لكن دون الإرجاع

هنا نحتاج للمعلومات التي نرسلها للنشاط الآخر. و تكون بنفس الشكل مع إضافة المعلومات:

public  void AfficheSecondAct(View v){
Bundle bData = new Bundle();


bData.putString("sX", eTX.getText().toString());

bData.putString("sY", eTY.getText().toString());

bData.putString("sRes", eTRes.getText().toString());


Intent secondact = new Intent(MainActivity.this, SecondActivity.class);

secondact.putExtras(bData);

startActivity(secondact);
    }

 

في هذا المثال نرسل ثلاث قيم من نوع سلسلة حروف.


5. الإنتقال من نشاط إلى آخر بالإرسال و مع الإرجاع

يمكن أن يرجع لنا النشاط الثاني نتائج سواء أرسلنا أو لم نرسل و كلاهما لهما نفس الشكل و الفرق في هل نرسل معلومات أم لا.

في هذا المثال نرسل معلومات و نستقبل معلومات من النشاط الثاني:

 

و هنا نستخدم startActivityForResult  أي إبدأ نشاط مع إنتظار إرجاع نتائج، عندما يعيد النشاط نتائج نحتاج لإستقبالها و التعامل معها و لهذا العرض يوجد إجراء خاص في كل نشاط إسمه : onActivityResult له الشكل التالي:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

}

حيث:

requestCode: يمثل رقم النشاط الذي قام بإرجاع المعلومات.
resultCode: عدد يرجعه النشاط حسب رغبة المبرمج و ما يرمز له.
Data: المعلومات التي أرسلها النشاط الثاني للأول

 

و هنا نحتاج في النشاط الثاني أن يعيد resultCode و Data قبل إغلاقه
في هذا المثال يقوم النشاط الأول بإرسال نفس المعلومات سابقا بينما يقوم النشاط الثاني بإرجاع إسم يقوم بحجزه المستخدم قبل إغلاق النشاط الثاني، resultCode نقوم بأرجاع 1 إذا قام المستخدم بكتابة إسم، و نرجع 0 إذا لم يقم بكتابة إسم قبل إغلاق النشاط الثاني.
عندما نعود للنشاط الأول نقوم بعرض الإسم إن وجد في EditText أو نعرض في EditText رسالة تقول " Erreur pas de nom retouner ".

 

النشاط الأول

نحتاج إلى إجراء لعرض النشاط الثاني و إرسال المعلومات له كما في المثال السابق

 
public  void afficheThirdAct (View v){
Bundle bData = new Bundle();


bData.putString("sX", eTX.getText().toString());

bData.putString("sY", eTY.getText().toString());

bData.putString("sRes", eTRes.getText().toString());


Intent thirdact = new Intent(MainActivity.this, ThirdActivity.class);

thirdact.putExtras(bData);

startActivityForResult(thirdact, 3);
    }

 

كما نحتاج لإستقبال المعلومات المرسلة من قبل النشاط الثاني:

 

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

    //Third axt response

    if(requestCode ==3)

        if(resultCode ==1)

        {
            Bundle bData = data.getExtras();
            String sName = bData.getString("Name");


            eTX.setText(sName);

        } else

            eTX.setText("Erreur pas de nom retourner");


}

 

في النشاط الثاني نحتاج إستقبال المعلومات المرسلة و نحتاج إرجاع المعلومات و هنا الإسم

إستقبال المعلومات و إستخلاصها نقوم بها في إجراء onCreate في مثالنا بإستخدام التعليمات التالية و نقوم بعرض المعلومات في  ثلاث TextView:

 

Bundle RecData = this.getIntent().getExtras();


String sX = RecData.getString("sX");

String sY = RecData.getString("sY");

String sRes = RecData.getString("sRes");


tVX.setText(sX);

tVY.setText(sY);

tVRes.setText(sRes);

 

و عندما نريد إرجاع المعلومات نقوم بدلك بالتعليمات التالية، في مثالنا هناك زر عندما يضغط عليه المستخدم يعيد النشاط المعلومات و يغلق ليعود للنشاط الأول:

 

public void bRetourClick(View v){

    if(eTName.getText().toString().length() == 0)

        this.setResult(0, null);

    else{

        String sName = eTName.getText().toString();


        Bundle buData = new Bundle();

        buData.putString("Name", sName);


        Intent RetData = new Intent();

        RetData.putExtras(buData);

        this.setResult(1, RetData);

    }
    finish();

}

نص مصدر كل نشاط

 

6. النشاط الأول

1.6. الواجهة ملف xml

 

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainActivity">


    <LinearLayout

        android:id="@+id/linearLayout"

        android:layout_width="0dp"

        android:layout_height="0dp"

        android:orientation="vertical"

        app:layout_constraintBottom_toBottomOf="parent"

        app:layout_constraintEnd_toEndOf="parent"

        app:layout_constraintStart_toStartOf="parent"

        app:layout_constraintTop_toTopOf="parent">


        <LinearLayout

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:orientation="horizontal">


            <TextView

                android:id="@+id/textView"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:text="X" />


            <EditText

                android:id="@+id/eTX"

                android:layout_width="match_parent"

                android:layout_height="wrap_content"

                android:ems="10"

                android:inputType="number" />


        </LinearLayout>


        <LinearLayout

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:orientation="horizontal">


            <TextView

                android:id="@+id/textView2"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:text="Y" />


            <EditText

                android:id="@+id/eTY"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:layout_weight="1"

                android:ems="10"

                android:inputType="number" />

        </LinearLayout>


        <LinearLayout

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:orientation="horizontal">


            <TextView

                android:id="@+id/textView3"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:text="Res" />


            <EditText

                android:id="@+id/eTRes"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:layout_weight="1"

                android:ems="10"

                android:inputType="number" />

        </LinearLayout>


        <LinearLayout

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:orientation="horizontal">


            <Button

                android:id="@+id/bsomme"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:onClick="bCalcul"

                android:text="+" />


            <Button

                android:id="@+id/bsous"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:onClick="bCalcul"

                android:text="-" />


            <Button

                android:id="@+id/bmul"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:onClick="bCalcul"

                android:text="*" />


            <Button

                android:id="@+id/bdiv"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:onClick="bCalcul"

                android:text="/" />

        </LinearLayout>


        <LinearLayout

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:orientation="horizontal">


            <Button

                android:id="@+id/button"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:onClick="AfficheSecondAct"

                android:text="Second Act" />


            <Button

                android:id="@+id/button2"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:onClick="afficheThirdAct"

                android:text="Third Act" />


            </LinearLayout>

    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

 

2.6. المصدر class java

package com.appsa2021;


import androidx.appcompat.app.AppCompatActivity;


import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.widget.EditText;


public class MainActivity extends AppCompatActivity {


    EditText eTX, eTY, eTRes;


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);


        eTX = (EditText)findViewById(R.id.eTX);

        eTY = (EditText)findViewById(R.id.eTY);

        eTRes = (EditText)findViewById(R.id.eTRes);

    }


    @Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

        //Third axt response

        if(requestCode ==3)

            if(resultCode ==1)

            {
                Bundle bData = data.getExtras();
                String sName = bData.getString("Name");


                eTX.setText(sName);

            } else

                eTX.setText("Erreur pas de nom retourner");


    }

    public void afficheThirdAct(View v){

        Bundle bData = new Bundle();


        bData.putString("sX", eTX.getText().toString());

        bData.putString("sY", eTY.getText().toString());

        bData.putString("sRes", eTRes.getText().toString());


        Intent thirdact = new Intent(MainActivity.this, ThirdActivity.class);

        thirdact.putExtras(bData);

        startActivityForResult(thirdact, 3);

       

    }


    public void AfficheSecondAct(View v){

        Intent secondact = new Intent(MainActivity.this, SecondActivity.class);

        startActivity(secondact);
    }


    public void bCalcul(View v){


        int x = Integer.valueOf( eTX.getText().toString());

        int y = Integer.valueOf( eTY.getText().toString());


        int res = 0;

        if(v.getId() == R.id.bsomme)

            res = x+y;
        else if(v.getId() == R.id.bsous)

            res = x-y;
        else if(v.getId() == R.id.bmul)

            res = x*y;
        else if(v.getId() == R.id.bdiv)

            res = x/y;

        eTRes.setText(String.valueOf(res));

    }
}

 

7. النشاط الثاني

1.7. الواجهة ملف xml

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".SecondActivity">



    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:orientation="horizontal">



        <TextView

            android:id="@+id/textView5"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_weight="1"

            android:text="TextView" />

    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

 

2.7. المصدر class java

 

package com.appsa2021;



import androidx.appcompat.app.AppCompatActivity;



import android.os.Bundle;



public class SecondActivity extends AppCompatActivity {



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_second);

    }

}

 

8. النشاط الثالث

1.8. الواجهة ملف xml

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".ThirdActivity">


    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:orientation="vertical">


        <TextView

            android:id="@+id/tVX"

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:text="TextView" />


        <TextView

            android:id="@+id/tVY"

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:text="TextView" />


        <TextView

            android:id="@+id/tVRes"

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:text="TextView" />


        <EditText

            android:id="@+id/eTName"

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:ems="10"

            android:inputType="textPersonName"

            android:text="Name" />


        <Button

            android:id="@+id/button3"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:onClick="bRetourClick"

            android:text="Retourn" />

    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

 

2.8. المصدر class java

 

package com.appsa2021;


import androidx.appcompat.app.AppCompatActivity;


import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.widget.EditText;

import android.widget.TextView;


public class ThirdActivity extends AppCompatActivity {


    TextView tVX, tVY, tVRes;

    EditText eTName;


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_third);


        tVX =(TextView)findViewById(R.id.tVX);

        tVY =(TextView)findViewById(R.id.tVY);

        tVRes =(TextView)findViewById(R.id.tVRes);


        eTName = (EditText)findViewById(R.id.eTName);


        Bundle RecData = this.getIntent().getExtras();


        String sX = RecData.getString("sX");

        String sY = RecData.getString("sY");

        String sRes = RecData.getString("sRes");


        tVX.setText(sX);

        tVY.setText(sY);

        tVRes.setText(sRes);

    }

    public void bRetourClick(View v){

        if(eTName.getText().toString().length() == 0)

            this.setResult(0, null);

        else{

            String sName = eTName.getText().toString();


            Bundle buData = new Bundle();

            buData.putString("Name", sName);


            Intent RetData = new Intent();

            RetData.putExtras(buData);

            this.setResult(1, RetData);

        }
        finish();

    }
}

 

 

ليصلك الجديد و تبقى دائما على إطلاع تابع صفحاتنا على الفيس بوك : :الأستاذ بن مير عبد القادر و baek-oasis

 

تعليقات