반응형

첫번째 화면에 있는 데이터를 두번째 화면에 가져와서 써보자.

 

 

intent 뜻(구글링): 어플리케이션 구성요소(컴포넌트) 간에 작업 수행을 위한 정보를 전달하는 역할을 하는 쉐킷.

컴포넌트 : 한개의 화면, 예를 들어 어플리케이션을 켰을 때 그냥 그 딱 하나의 화면.

 

package tipcalculator.gohool.firstactivity;

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

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private Button button;

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

        button = (Button) findViewById(R.id.btn);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //intent = 앱 컴포넌트(모듈 즉,화면)가 무엇을 할 것인지를 담는 메시지 객체. 화면전환이 가장 쉬운 예
                //첫번째 인자 : 현재 액티비티(MainActivity의 정보가 담겨있음)
                //두번쨰 인자 : 호출할 컴포넌트(Second)
                Intent intent =  new Intent(MainActivity.this, Second.class);

                //여러 값들을 쓸 수 있다. 첫번째 인자 : 스트링, 두번째 인자 : whatever you want
                intent.putExtra("question", "누구세요?");
                intent.putExtra("answer", "뚱인데요?");

                //전송된 데이터를 실행해준다.
                startActivity(intent);
            }
        });

    }
}
package tipcalculator.gohool.firstactivity;

import android.os.Bundle;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

public class Second extends AppCompatActivity {

    private TextView textView;

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

        //가져오기!
        //Bundle은 여러가지의 타입의 값을 저장하는 Map. 즉,아무거나 포장할 수 있는 상자
        //다 담아버린다. string int ...등등
        Bundle extra = getIntent().getExtras();

        textView = (TextView) findViewById(R.id.textView);

        if(extra != null){

            //각 변수에 담아온 MainActicity의 extra들을 가져옴. 인자: 키값으로
            String message = extra.getString("question");
            String message1 = extra.getString("answer");

            textView.setText(message + message1);
        }

    }
}

두번째 화면에서 첫번째 화면으로 다시 이동하기(with onactivityresult)

package tipcalculator.gohool.firstactivity;

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

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

public class MainActivity extends AppCompatActivity {

    private Button button;
    private final int REQ_CODE = 7640;

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

        button = (Button) findViewById(R.id.btn);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //intent = 앱 컴포넌트(모듈 즉,화면)가 무엇을 할 것인지를 담는 메시지 객체. 화면전환이 가장 쉬운 예
                //첫번째 인자 : 현재 액티비티(MainActivity의 정보가 담겨있음)
                //두번쨰 인자 : 호출할 컴포넌트(Second)
                Intent intent =  new Intent(MainActivity.this, Second.class);

                //여러 값들을 쓸 수 있다. 첫번째 인자 : 스트링, 두번째 인자 : whatever you want
                intent.putExtra("buyMerona", "올때 메로나");

                //전송된 데이터를 실행해준다.
                //startActivity(intent);

                //음.. 갈때 패스워드 외워가서 올때 누르고 들어와~
                startActivityForResult(intent,REQ_CODE);

            }
        });

    }
    //정말 간단하게 설명하면 Activity A와 B가 있을 때, A에서 B로 갔다가 다시 A로 넘어올 때 사용하는,
    // 안드로이드에서 제공하는 기본 메소드입니다.
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == REQ_CODE){ // 패스워드 주고 보낸 socond가 맞는지 구별
            if(resultCode == RESULT_OK){ // socond가 어떤 결과코드를 주었는지
                String result = data.getStringExtra("merona");
                Toast.makeText(MainActivity.this,result,Toast.LENGTH_LONG).show();
            }

        }
    }
}

 

package tipcalculator.gohool.firstactivity;

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

import androidx.appcompat.app.AppCompatActivity;

public class Second extends AppCompatActivity {

    private TextView textView;
    private Button btn;


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

        //가져오기!
        //Bundle은 여러가지의 타입의 값을 저장하는 Map. 즉,아무거나 포장할 수 있는 상자
        //다 담아버린다. string int ...등등
        Bundle extra = getIntent().getExtras();

        textView = (TextView) findViewById(R.id.textView);

        if(extra != null){

            //각 변수에 담아온 MainActicity의 extra들을 가져옴. 인자: 키값으로
            String message = extra.getString("buyMerona");

            textView.setText(message);
        }

        //1번화면으로 돌아가기위한 코드
        btn = (Button) findViewById(R.id.gobackbtn);


        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent givedataBack = getIntent(); //돌아갈때 가지고갈 데이터를 만들기위해;
                givedataBack.putExtra("merona", "옛다 메로나");
                setResult(RESULT_OK, givedataBack); //첫번째인자로, resultcode, 두번째 data로 받는데, RESULT_OK 이세키 안전하니까 보내줘도된다는 뜻
                finish();
            }
        });
    }

}

 

반응형

+ Recent posts