الإنتقال بين الأنشطة تبادل المعلومات
في تطبيقات أندرويد ستوديو
1. مقدمة
التطبيق قد
تكون فيه عدة أقسام و نريد كل قسم مستقلا على الآخر فهنا لا بد أن يصبح التطبيق
مؤلفا من عدة أنشطة Activities، في هذا
الموضوع سنتطرق إلى الإنتقال من نشاط إلى آخر و كذلك تبادل المعلومات.
2. الإنتقال بين الأنشطة Activities
يمكن الإنتقال بين الأنشطة و تبادل المعلومات، و نجد أربع أحتمالات في تبادل
المعلومات و هي:
· لا يوجد إرسال بيانات و لا إرجاع.
· يوجد إرسال بيانات بدون إرجاع.
· لا يوجد إرسال بيانات و يوجد إرجاع.
· يوجد إرسال بيانات و يوجد إرجاع.
لدراسة كل هذه الإحتمالات سنحتاج أن يكون التطبيق فيه 3 أنشطة Activities، واحدة ننطلق منها و الإثنتان
نذهب لهما، كما أننا لكي نبين التواصل بين الأنشطة نقوم بتقديم أمثلة.
نسمي الإنشطة في المثال : MainActivity، Main2Activity، Main3Activity
3. الإنتقال من نشاط إلى آخر دون إرسال أو إرجاع
هذا هو أبسط شكل بحيث يعرض النشاط الثاني و نحتاج
للتعليمات التالية:
يمكن أن ضعهما في إجراء ينفذ
عند الضغط على زر:
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 له الشكل التالي:
}
حيث:
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);
}
كما نحتاج لإستقبال المعلومات
المرسلة من قبل النشاط الثاني:
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);//Third axt responseif(requestCode ==3)if(resultCode ==1){Bundle bData = data.getExtras();String sName = bData.getString("Name");eTX.setText(sName);} elseeTX.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"><LinearLayoutandroid: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"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="X" /><EditTextandroid:id="@+id/eTX"android:layout_width="match_parent"android:layout_height="wrap_content"android:ems="10"android:inputType="number" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:id="@+id/textView2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Y" /><EditTextandroid:id="@+id/eTY"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:ems="10"android:inputType="number" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:id="@+id/textView3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Res" /><EditTextandroid:id="@+id/eTRes"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:ems="10"android:inputType="number" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:id="@+id/bsomme"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="bCalcul"android:text="+" /><Buttonandroid:id="@+id/bsous"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="bCalcul"android:text="-" /><Buttonandroid:id="@+id/bmul"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="bCalcul"android:text="*" /><Buttonandroid:id="@+id/bdiv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="bCalcul"android:text="/" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"><Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="AfficheSecondAct"android:text="Second Act" /><Buttonandroid: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;@Overrideprotected 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);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);//Third axt responseif(requestCode ==3)if(resultCode ==1){Bundle bData = data.getExtras();String sName = bData.getString("Name");eTX.setText(sName);} elseeTX.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"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"><TextViewandroid: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 {@Overrideprotected 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"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/tVX"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="TextView" /><TextViewandroid:id="@+id/tVY"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="TextView" /><TextViewandroid:id="@+id/tVRes"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="TextView" /><EditTextandroid:id="@+id/eTName"android:layout_width="match_parent"android:layout_height="wrap_content"android:ems="10"android:inputType="textPersonName"android:text="Name" /><Buttonandroid: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;@Overrideprotected 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
تعليقات
إرسال تعليق