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 |