앱만들기.25(startActivityForresult)

StartAcrivityForResult가 무엇이냐?

 

일반적으로 activiriy를 띄울때는 startActivity를 사용한다고 함.

다른방법이 startActivityforresult

 

1. 용도 차이

startActivity : 새 액티비티를 열어줌 (단방향)

 

startActivityForResult : 새 액티비티를 열어줌 + 결과값 전달 (쌍방향)

 

즉, 결과값을 전달해주느냐 아니냐의 차이다.

 

Activity에서 resultCode를 보내서 원하는 기능을 수행할 수 있다.

 

 

더 자세한내용:: https://jhshjs.tistory.com/49 [독학하는 1인 개발자]

 

 

Main.java

package com.example.comebackexample;

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;
import android.widget.Toast;

import org.w3c.dom.Text;

public class MainActivity extends AppCompatActivity {

    private TextView tv_comeback;
    private Button btn_go;

    //상수의변수값을 대문자로 선언했음, 상수(항상같은수)
    private static final int REQUEST_CODE = 219;




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


        tv_comeback = findViewById(R.id.tv_comeback);
        btn_go = findViewById(R.id.btn_go);

        btn_go.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(),SubActivity.class);
                startActivityForResult(intent,REQUEST_CODE); // 오늘배우는거~!

            }
        });







    }

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

        if(resultCode == RESULT_OK){
        Toast.makeText(getApplicationContext(),"수신 성공",Toast.LENGTH_SHORT).show();
        }else{
            Toast.makeText(getApplicationContext(),"수신 실패",Toast.LENGTH_SHORT).show();
        }

        if(requestCode == REQUEST_CODE){
            String resultTxt = data.getStringExtra("comeback");//값 전달받기
            tv_comeback.setText(resultTxt); //가져온값을 tvcomeback에 입력해줌
        }

    }

}

main.xml

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

    <TextView
        android:id="@+id/tv_comeback"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:text="값을 가져와주세요"/>

    <Button
        android:id="@+id/btn_go"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Go"
        />

</LinearLayout>

SUBACTIVITY.JS

package com.example.comebackexample;

import androidx.appcompat.app.AppCompatActivity;

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

public class SubActivity extends AppCompatActivity {

    private Button btn_close;
    private EditText et_comeback;

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


        et_comeback = findViewById(R.id.et_comeback);
        btn_close = findViewById(R.id.btn_close);

        btn_close.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.putExtra("comeback",et_comeback.getText().toString()); //edittext에서입력한값을 가지고 main액티비티로 감 이 스트링값만 맞춰주면됨.
                setResult(RESULT_OK,intent); //main에서 보낸 요청에대한 돌려주는 결과값 설정
                finish(); //현재 액티비티 종료.
            }

        });



    }
}

sub.xml

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

    <EditText
        android:id="@+id/et_comeback"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="main으로 보낼 값 입력해주세요" />

    <Button
        android:id="@+id/btn_close"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="종료"/>


</LinearLayout>

 

결과:

또~자꾸 usb도 연결이안되고;;avd도안됨 미칠듯