Intent에 결과를 저장하여 sub화면으로 넘기는 법

btnMain.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                PersonDto person1 = new PersonDto("css",3333);

                Intent intent = new Intent(MainActivity.this,Sub1Activity.class);
                intent.putExtra("id","kim");
                intent.putExtra("pw",1234);
                intent.putExtra("person1",person1);
                startActivityForResult(intent,REQUEST_CODE);//결과를 받겠다


            }
        });

btnMain를 클릭 했을 때 서브화면으로 Intent를 통해 정보를 저장하여 전달한다.

 

정보를 저장 할 dto 객체를 생성 후

intent에 putExtra(key,value) 메소드를 이용하여 정보를 저장한다.

dto에는 생성자를 통해 css,3333 를 전달한다.

 

기본적인 화면을 넘길때는 startActivity를 사용하지만 정보를 저장 한 intent를 넘길 때는 

 

startActivityForResult(intent,REQUEST_CODE);//결과를 받겠다

 

를 사용한다.

 

-sub1.java-

 //데이터  받는 곳
        intent = getIntent();
        
        String id=intent.getStringExtra("id");
        int pw = intent.getIntExtra("pw",0); //INT값은 기본값을 주어야 한다.

        PersonDto person1 = (PersonDto) intent.getSerializableExtra("person1");  //serializable로 받음
        Log.d(TAG, "onCreate: id : "+id);
        Log.d(TAG, "onCreate: pw : "+pw);   //로그에는 int형을 단독으로 쓰지 못한다.

        tvSub1.setText("받은값은 : "+id+", "+pw);
        tvSub1.append("\nPerson1 : "+person1.getId()+", "+person1.getPw());
       // tvSub1.setText(tvSub1.getText()+"\nPerson1 : "+person1.getId()+", "+person1.getPw());

main에서 넘어온 intent를 sub1에서 넘겨받아 intent에 담겨진 정보를 꺼내서 저장 한다.

 

String id=intent.getStringExtra("id");
int pw = intent.getIntExtra("pw",0); //INT값은 기본값을 주어야 한다.

 

String형을 받을 때는 getStringExtra("key"),

Int 형을 받을 때는 getIntExtra("key"); 메소드를 사용한다.

 

PersonDto person1 = (PersonDto) intent.getSerializableExtra("person1"); //serializable로 받음

 

DTO객체를 받을 때는 직렬화 방식으로 받고 (personDTO)로 캐스팅을 해줘야 한다.

 

 

 //메인에 데이터 보내기
        btnSub1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent reintent = new Intent();
                reintent.putExtra("key",tvSub1.getText().toString()+" ㅋㅋㅋ");
                setResult(RESULT_OK,reintent); //메인에 결과를 보냄
                finish();   //엑티비티 종료
            }
        });

호출당한 엑티비티에서 호출한 엑티비티로 결과값을 전달 할 때는 setResult메소드를 사용한다.

finish(); 메소드를 통해 서브 엑티비티를 종료하고 메인 엑티비티로 돌아간다.

 

---전체코드---

더보기

-전체코드-

 

-main.xml-

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
 >


    <Button
        android:id="@+id/btnMain"
        android:layout_width="151dp"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginStart="127dp"
        android:layout_marginLeft="127dp"
        android:layout_marginTop="62dp"
        android:layout_marginEnd="133dp"
        android:layout_marginRight="133dp"
        android:text="새화면띄우기" />

    <TextView
        android:id="@+id/tvMain"
        android:layout_width="171dp"
        android:layout_height="135dp"
        android:layout_below="@+id/btnMain"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginStart="119dp"
        android:layout_marginLeft="119dp"
        android:layout_marginTop="42dp"
        android:layout_marginEnd="121dp"
        android:layout_marginRight="121dp"
        android:text="TextView" />
</RelativeLayout>

-main.java-

package com.example.my10_intentresult;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    Button btnMain;
    TextView tvMain;
    public final int  REQUEST_CODE = 1004;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tvMain=findViewById(R.id.tvMain);
        btnMain=findViewById(R.id.btnMain);

        btnMain.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                PersonDto person1 = new PersonDto("css",3333);

                Intent intent = new Intent(MainActivity.this,Sub1Activity.class);
                intent.putExtra("id","kim");
                intent.putExtra("pw",1234);
                intent.putExtra("person1",person1);
                startActivityForResult(intent,REQUEST_CODE);//결과를 받겠다


            }
        });
    }

    // 데이터 받기

    @Override   //서브1에서 받는 부분
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        if (requestCode==REQUEST_CODE){     //1004이면
            if(data !=null){
             String key = data.getStringExtra("key");
             tvMain.setText(key);
            }
        }

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

-sub1.xml-

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    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=".Sub1Activity">

    <Button
        android:id="@+id/btnSub1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginStart="160dp"
        android:layout_marginLeft="160dp"
        android:layout_marginTop="76dp"
        android:layout_marginEnd="163dp"
        android:layout_marginRight="163dp"
        android:text="메인으로 돌아가기" />

    <TextView
        android:id="@+id/tvSub1"
        android:layout_width="195dp"
        android:layout_height="90dp"
        android:layout_below="@+id/btnSub1"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginStart="107dp"
        android:layout_marginLeft="107dp"
        android:layout_marginTop="87dp"
        android:layout_marginEnd="109dp"
        android:layout_marginRight="109dp"
        android:text="TextView" />
</RelativeLayout>

-sub1.java-

package com.example.my10_intentresult;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.nfc.Tag;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class Sub1Activity extends AppCompatActivity {
    private static final String TAG = "Sub1Activity";
    Button btnSub1;
    TextView tvSub1;
    Intent intent;

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


        btnSub1= findViewById(R.id.btnSub1);
        tvSub1 = findViewById(R.id.tvSub1);



        //데이터  받는 곳
        intent = getIntent();
        
        String id=intent.getStringExtra("id");
        int pw = intent.getIntExtra("pw",0); //INT값은 기본값을 주어야 한다.

        PersonDto person1 = (PersonDto) intent.getSerializableExtra("person1");  //serializable로 받음
        Log.d(TAG, "onCreate: id : "+id);
        Log.d(TAG, "onCreate: pw : "+pw);   //로그에는 int형을 단독으로 쓰지 못한다.

        tvSub1.setText("받은값은 : "+id+", "+pw);
        tvSub1.append("\nPerson1 : "+person1.getId()+", "+person1.getPw());
       // tvSub1.setText(tvSub1.getText()+"\nPerson1 : "+person1.getId()+", "+person1.getPw());


        //메인에 데이터 보내기
        btnSub1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent reintent = new Intent();
                reintent.putExtra("key",tvSub1.getText().toString()+" ㅋㅋㅋ");
                setResult(RESULT_OK,reintent); //메인에 결과를 보냄
                finish();   //엑티비티 종료
            }
        });

    }
}

-personDTO-

package com.example.my10_intentresult;

import java.io.Serializable;

public class PersonDto implements Serializable {
    String id;
    int pw;

    public PersonDto(String id, int pw) {
        this.id = id;
        this.pw = pw;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public int getPw() {
        return pw;
    }

    public void setPw(int pw) {
        this.pw = pw;
    }
}

 

'For developer > Android' 카테고리의 다른 글

(Android)my13_service  (0) 2020.05.21
(Android)my11_dialog_대화상자  (0) 2020.05.21
(my09_layoutinflate)인플레이트  (0) 2020.05.21
(Andorid)intentresult  (0) 2020.05.18
(Android)공모전 앱 제작(~ing)  (0) 2020.05.17

+ Recent posts