یک فنجان مشاوره
مهـمـان مــا باشیـد

شـمـــاره تــمــاس
031-36644146

نحوه ی انتقال داده از یک اکتیویتی به اکتیویتی دیگر در اندروید استودیو

انتشار 04 اسفند 1397
دیدگاه ها 0
زمان تقریبی مطالعه
گردآوری پدیده تجارت

در ادامه آموزش اندروید استدیو به مبحثی بر میخوریم تحت عنوان انتقال داده از یک اکتیویتی به اکتیویتی دیگر در اندروید استودیو صفحات یا همان اکتیویتی ها توسط intent جابجا می شوند. هر اکتیویتی جدیدی که ایجاد می شود داخل حافظه ی رم قرار می گیرد. روند جابجایی با intent به اینصورت است که اکتیویتی ها روی هم قرار می گیرند و هربار با کلیک روی دکمه ی بک گوشی، اکتیویتی قبلی از حافظه ی رم خوانده شده و اجرا می شود . اما زمانی که میخواهیم یک اکتیویتی از حافظه ی رم پاک شود و اکتیویتی زیرین جایگزین آن شده و اجرا شود از finish استفاده می کنیم.

در هر دو حالت ، ممکن است بخواهیم با جابجایی اکتیویتی داده ای را انتقال دهیم . در این مقاله نحوه ی انتقال داده از یک اکتیوینی به اکتیویتی دیگر را آموزش می دهیم.

یک پروژه ی جدید ایجاد کنید. داخل صفحه ی main دو Button و یک TextView قرار دهید. Button ها برای انتقال به Activity2 و Activity3 و TextView برای نمایش داده.

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btn_GoToActivity2"
        android:layout_width="200dp"
        android:layout_height="60dp"
        android:text="GoToActivity2"
        android:textSize="18sp" />

    <Button
        android:id="@+id/btn_GoToActivity3"
        android:layout_width="200dp"
        android:layout_height="60dp"
        android:text="GoToActivity3"
        android:textSize="18sp"
        android:layout_marginTop="10dp"/>

    <TextView
        android:id="@+id/tv_showInformation"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:padding="10dp"
        android:layout_marginTop="30dp"
        android:textSize="18sp"/>

</LinearLayout>

دو اکتیویتی به نام های Activity2 و Activity3 ایجاد کرده و داخل هر کدام یک Button برای بازگشت به صفحه ی main و یک EditText برای وارد کردن داده ، قرار دهید.

activity_2.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".Activity2">

    <Button
        android:id="@+id/btn_GoToMain_WithIntent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Activity2"
        android:textSize="20sp"
        android:textStyle="bold" />

    <EditText
        android:id="@+id/edt_inputInformation_2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:hint="اطلاعات خود را وارد کنید:"
        android:padding="10dp"/>
</LinearLayout>

activity_3.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".Activity3">

    <Button
        android:id="@+id/btn_GoToMain_WithFinish"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Activity3"
        android:textSize="20sp"
        android:textStyle="bold" />

    <EditText
        android:id="@+id/edt_inputInformation_3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:hint="اطلاعات خود را وارد کنید:"
        android:padding="10dp"/>
</LinearLayout>

انتقال داده از یک اکتیویتی به اکتیویتی دیگر

فرض کنید یک اکتیویتی توسط intent جابجا شده و به اکتیویتی دیگر می رود. در این حالت می خواهیم با جابجایی اکتیویتی ، داده ای را به اکتیویتی جدید انتقال دهیم.

Activity2.java:

داخل Activity2 کد زیر را وارد کنید:

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

public class Activity2 extends AppCompatActivity {
    Button btn_GoToMain_WithIntent;
    EditText edt_inputInformation_2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_2);

        btn_GoToMain_WithIntent = findViewById(R.id.btn_GoToMain_WithIntent);
        edt_inputInformation_2 = findViewById(R.id.edt_inputInformation_2);

        btn_GoToMain_WithIntent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(Activity2.this , Intent_FinishActivity.class);
                i.putExtra("information_Activity2" , edt_inputInformation_2.getText().toString());
                startActivity(i);
            }
        });
    }
}

 

توضیح کد بالا:

ابتدا یک Button و یک EditText تعریف کرده سپس آن ها را findviewById می کنیم. می خواهیم با کلیک روی دکمه، توسط intent به صفحه ی main برگردیم و اطلاعات داخل EditText را به صفحه ی main انتقال داده و داخل TextView که در MainActivity قرار دارد نمایش دهیم.

برای Button متد setonClickListener نوشته و داخل آن یک intent برای جابجایی صفحه تعریف می کنیم وصفحه ای که در آن قرار داریم و صفحه ای که می خواهیم به آن منتقل شویم را مشخص می کنیم. سپس برای انتقال داده ، از putExtra استفاده می کنیم.  putExtra  قابلیت این را دارد که انواع مختلفی از داده ها (int،String،float، double و …) را انتقال دهد که نوع داده  ی ما در این قسمت String می باشد.

putExtra   بصورت key/value کار می کند به این منظور که دارای یک نام و یک مقدار می باشد. پس برای انتقال داده لازم است یک نام و یک مقدار برای آن تعریف کنیم.

نام داده را information_Activity2 قرار دادیم و برای مقدار آن ، داده ی داخل EditText را گرفتیم. در آخر نیز با استفاده از  StartActivity به صفحه ی MainActivity ، منتقل می شویم.

 

حالا فرض کنید یک اکتیویتی توسط finish حذف شده و اکتیوتی قبلی اجرا می شود چگونه داده ای را از اکتیویتی حذف شده به اکتیویتی قبلی انتقال دهیم؟

Activity3.java:

داخل Activity3 کد زیر را وارد کنید:

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

public class Activity3 extends AppCompatActivity {

    Button btn_GoToMain_WithFinish;
    EditText edt_inputInformation_3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_3);

        btn_GoToMain_WithFinish = findViewById(R.id.btn_GoToMain_WithFinish);
        edt_inputInformation_3 = findViewById(R.id.edt_inputInformation_3);

        btn_GoToMain_WithFinish.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent();
                i.putExtra("information_Activity3" , edt_inputInformation_3.getText().toString());
                setResult(Activity.RESULT_OK , i);
                finish();
            }
        });
    }
}

 

توضیح کد بالا:

ابتدا یک Button و یک EditText تعریف کرده سپس آن ها را findviewById می کنیم. می خواهیم با کلیک روی دکمه، توسط finish به صفحه ی main برگردیم و اطلاعات داخل EditText را به صفحه ی main انتقال داده و داخل TextView که در MainActivity قرار دارد نمایش دهیم.

برای Button متد setonClickListener می نویسیم.برای انتقال اطلاعات توسط finish کافیست فقط یک intent تعریف کنیم بدون اینکه صفحه ای که در آن قرار داریم و صفحه ای که می خواهیم به آن منتقل شویم را مشخص کنیم. سپس مانند کدهای قبلی برای انتقال داده ، از putExtra استفاده کرده و یک نام و یک مقدار برای داده ی خود تعریف می کنیم.

همچنین لازم است برای داده ی خود SetResult تعریف کرده و به ورودی های آن RESULT_OK و intent را بدهیم. در آخر نیز توسط finish به MainActivity منتقل می شویم.

گرفتن داده از یک اکتیویتی و نمایش آن در اکتیویتی جدید

تا اینجا آموزش دادیم چگونه داده ای را از یک اکتیویتی به اکتیویتی دیگر انتقال دهیم. اما حالا می خواهیم ببینیم چگونه داده ای که انتقال دادیم را بگیریم و آن را نمایش دهیم.

MainActivity.java:

داخل MainActivity کد زیر را وارد کنید:

import android.content.Intent;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    Button btn_GoToActivity2, btn_GoToActivity3;
    TextView tv_showInformation;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn_GoToActivity2 = findViewById(R.id.btn_GoToActivity2);
        btn_GoToActivity3 = findViewById(R.id.btn_GoToActivity3);
        tv_showInformation = findViewById(R.id.tv_showInformation);

        btn_GoToActivity2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(Intent_FinishActivity.this, Activity2.class);
                startActivity(i);
            }
        });

        btn_GoToActivity3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(Intent_FinishActivity.this, Activity3.class);
                startActivityForResult(i ,3);
            }
        });


        String information = getIntent().getStringExtra("information_Activity2");
        tv_showInformation.setText(information);

    }

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

        if(requestCode == 3){
            if(resultCode == RESULT_OK){
                tv_showInformation.setText(data.getStringExtra("information_Activity3"));
            }
        }

        super.onActivityResult(requestCode, resultCode, data);
    }
}

توضیح کد بالا:

ابتدا دو Button و یک TextView تعریف کرده و آن ها را findViewById می کنیم.سپس برای Button ها متد setonClickListener می نویسیم.

می خواهیم با کلیک روی دکمه ی btn_GoToActivity2، به Activity2 منتقل شویم، پس یک intent تعریف کرده و آن را startActivity می کنیم:

btn_GoToActivity2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent i = new Intent(Intent_FinishActivity.this, Activity2.class);
        startActivity(i);
    }
});

می خواهیم با کلیک روی دکمه ی btn_GoToActivity3، به Activity3 منتقل شویم، اما چون قرار است از Activity3 با finish به این صفحه برگردیم و داده ای را منتقل کنیم بجای startActivity ، باید از startActivityForResult استفاده کنیم و علاوه بر intent به آن یک requestCode نیز بدهیم . با استفاده از requestCode  یک کد به اکتیویتی که می خواهیم منتقل شویم اختصاص می دهیم.

btn_GoToActivity3.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent i = new Intent(Intent_FinishActivity.this, Activity3.class);
        startActivityForResult(i ,3);
    }
});

گرفتن داده از Activity2 و نمایش آن در MainActivity

داخل صفحه ی Activity2  با کلیک روی دکمه ی آن ، داده ای را گرفته و توسط intent به صفحه ی MainActivity انتقال دادیم. می خواهیم این داده را بگیریم و داخل TextView ست کنیم. برای این کار ابتدا یک متغیر از نوع داده ی خود تعریف کرده سپس عبارت getIntent().getStringExtra را نوشته و نام داده ی خود را به آن می دهیم. دقت کنید که این نام باید دقیقا همان نامی باشد که در Activity2  بکار بردیم.

توجه داشته باشید که در اینجا چون داده ی ما از نوع String بود از متد getStringExtra استفاده کردیم ، شما می توانید انواع مختلف داده ها را به اینصورت بگیرید.

String information = getIntent().getStringExtra("information_Activity2");

و در آخربعد از گرفتن داده، آن را برای TextView  ست می کنیم:

tv_showInformation.setText(information);

گرفتن داده از Activity3 و نمایش آن در MainActivity

داخل صفحه ی Activity3  با کلیک روی دکمه ی آن داده ای را گرفته و توسط finish به صفحه ی MainActivity انتقال دادیم. می خواهیم این داده را بگیریم و داخل TextView ست کنیم.

برای این کار ابتدا باید بیرون از onCreate متدی تعریف کنیم بنام onActivityResult. برای نوشتن این متد کافیست نام آن را نوشته و آن را ایمپورت کنیم.

داخل این متد ابتدا چک می کنیم که از کدام اکتیویتی برمی گردیم که این کار توسط requestCode انجام می شود.

داخل MainActivity برای انتقال به صفحه ی Activity3 از startActivityForResult استفاده کردیم و به آن یک requestCode دادیم .حالا باید داخل متد onActivityResult با if چک کنیم آیا requestCode با این requestCode که ما تعریف کرده بودیم برابر هست یا نه . اگر برابره چک کنیم آیا resultCode با RESULT_OK برابر هست یا نه. اگر برابره داده را گرفته و برای TextView ست کنیم.

در پارامتر های ورودی متد onActivityResult یک intent بنام data تعریف شده که برای گرفتن داده بجای نوشتن getIntent() همان data را می نویسیم.

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

    if(requestCode == 3){
        if(resultCode == RESULT_OK){
            tv_showInformation.setText(data.getStringExtra("information_Activity3"));
        }
    }

    super.onActivityResult(requestCode, resultCode, data);
}

خروجی پروژه

با اجرا کردن پروژه ابتدا وارد صفحه ی زیر می شوید:

سپس با کلیک روی دکمه ی اولی به صفحه ی زیر منتقل می شوید:

داخل EditText متنی را وارد کنید:

سپس روی دکمه کلیک کنید. با کلیک روی دکمه به صفحه ی زیر منتقل می شوید:

همانطور که مشاهده می کنید متن داخل EditText به این صفحه منتقل شد و داخل TextView نمایش داده شد.

برای دکمه ی دوم نیز خروجی پروژه به همین صورت می باشد.

 

ما در شرکت طراحی سایت پدیده تجارت اصفهان به عنوان یکی از شرکتهای مطرح در زمینه برنامه نویسی موبایل و اپ آماده همه گونه خدمات حرفه ای و تخصصی به شما عزیزان برنامه نویس هستیم.

——————————-آینده از آن کسب و کارهای آنلاین است———————–

نویسنده: الهه ابراهیمی

مقالات مرتبط

شاید علاقمند به دیدن این مقالات نیز باشید
(آرشیو کامل)

رمز موفقیت برندهای قدرتمند رمز موفقیت برندهای قدرتمند مقالات برندینگ

پدیده تجارت

17 آذر 1392

تفاوت آموزش وردپرس پدیده با دیگر آموزش های خصوصی در چیست؟! تفاوت آموزش وردپرس پدیده با دیگر آموزش های خصوصی در چیست؟! مقالات طراحی وب سایت

پدیده تجارت

09 آبان 1397

آشنایی با نحوه کار keyfream در نرم افزار After Effects آشنایی با نحوه کار keyfream در نرم افزار After Effects مقالات تجارت الکترونیک

پدیده تجارت

25 شهریور 1397

ساخت ViewPager در اندروید ساخت ViewPager در اندروید مقالات موبایل

پدیده تجارت

15 دی 1397

صفر تا صد شروع کسب و کار آنلاین صفر تا صد شروع کسب و کار آنلاین مقالات برندینگ

پدیده تجارت

04 آبان 1398

طراحی سایت پزشکی طراحی سایت پزشکی مقالات طراحی وب سایت

پدیده تجارت

12 مهر 1396

چرا برنامه نویسی را یادبگیریم ؟ چرا برنامه نویسی را یادبگیریم ؟ مقالات تجارت الکترونیک

پدیده تجارت

16 فروردین 1401

ایمیل مارکتینگ چیست؟ ایمیل مارکتینگ چیست؟ مقالات برندینگ

پدیده تجارت

23 تیر 1398

اشتباهات رایج طراحی سایت اشتباهات رایج طراحی سایت طراحی سایت اختصاصی

پدیده تجارت

10 دی 1398

آشنایی با زبان جاوا آشنایی با زبان جاوا مقالات

پدیده تجارت

07 بهمن 1398

طراحی نرم افزارهای اندروید در اصفهان طراحی نرم افزارهای اندروید در اصفهان مقالات موبایل

پدیده تجارت

19 آذر 1396

آموزش تخصصی وردپرس اصفهان آموزش تخصصی وردپرس اصفهان مقالات طراحی وب سایت

پدیده تجارت

12 اسفند 1398

دیدگاه کاربران

0

0 0 رای ها
امتیازدهی به مقاله
guest
0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها