본문 바로가기
개발/안드로이드 어플

①안드로이드어플개발 - Intent 화면전환, findViewById

by 외노자개발 2022. 11. 25.
반응형

https://www.youtube.com/watch?v=EKCQ6sxMWNo&list=PLC51MBz7PMyyyR2l4gGBMFMMUfYmBkZxm&index=4 

 

 

Intent란?


특정 작업을 요청할 때 사용할 수 있는 메시징 개체 를 의미합니다. 

「열려 있는 화면에 대해서 다른 화면을 열어 주세요」라고 앱에 메세지로서 전하는 것으로, 다른 화면을 열 수 있습니다.

 

Activity 시작


간단히 Activity에 대해 설명하면 Activity는 앱에서 하나의 화면을 나타냅니다. Activity가 있는 것으로 유저는 화면을 이용해, 뭔가의 버튼을 누를 수 있거나, 처리를 실시할 수 있는 것입니다.

 

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private Button btn_move;

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

        btn_move = findViewById(R.id.btn_move);
        btn_move.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, SubActivity.class);
                startActivity(intent);
            }
        });
    }
}

 

onCreate클래스는 어플리케이션을 실행하였을 때 바로 화면을 보여주는 클래스입니다.

super.onCreate(savedInstanceState);와 setContentView는 프로젝트 오픈시 바로 적혀있기 때문에 우선 무시하도록 하겠습니다. 

 

상기의 코드에서 Intent는 이 부분에 해당하는데요.

Intent intent = new Intent(MainActivity.this, SubActivity.class);
startActivity(intent);

MainActivity.this는 MainActivity를 지정하고, Intent에는 "MainActivity에서 SampleActivity 열기" 라는 의미를 담게 됩니다.

  그런 다음 startActivity라는 함수에 intent를 전달하여 처리를 수행합니다.

 

 

findViewById


findViewById 메소드는 id값을 이용해 특정 뷰를 받아와주는 메소드로, 액티비티, 프래그먼트, 뷰홀더 등에서 다양하게 사용이 된다.

 

MainActivity.java

btn_move = findViewById(R.id.btn_move);
btn_move.setOnClickListener(new View.OnClickListener() {...}

여기서는 btn_move 로 findViewById를 해서 리소스의 id인 btn_move를 가져온다.

 

xml파일을 살펴보자

 

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  ...

    <Button
        android:id="@+id/btn_move"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="이동"/>
        
  ...
  />

Button을 작성하였고, 버튼에는 id와 크기, text로 "이동"을 입력하였다.

여기서 확인할 것은 방금 MainActivity.java의 변수 btn_move를 사용하고 서로 연결하였다.

MainActivity.java에서는 지역변수를 btn_move로 줬을 뿐 이지만, 

findViewById(R.id.btn_move);

findViewById를 해줌으로써 btn_move로 지정된 id를 가져옴으로써 

서로 연결 된 것을 알 수 있다. 

 

 

심화 


Main Text를 sub 에 표시하기

 

MainActivity.java

    private EditText et_test;
    private Button btn_move;
    private String str;
    
	protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        et_test = findViewById(R.id.et_test);
        btn_move = findViewById(R.id.btn_move);
        
        btn_move.setOnClickListener(new View.OnClickListener() {
            
            public void onClick(View view) {
                str = et_test.getText().toString();
                Intent intent = new Intent(MainActivity.this, SubActivity.class);
                intent.putExtra("str",str);
                startActivity(intent);
            }
    }

 

Activity_Main.xml에는 입력란과 이동 버튼이 있습니다.

입력란에 글자를 입력하고 이동버튼을 누르게 되면 그 글자들이 Sub 화면에 표시하는 기능을 해보겠습니다.

 

et_test : 입력란의 id를 받아옵니다.

btn_move : 이동 버튼의 id를 받아옵니다.

 

코드가 추가된 부분은 

                str = et_test.getText().toString();
                intent.putExtra("str",str);

이 두 부분 입니다. str변수에 et_test의 입력란에 입력된 값을 getText()를 해서 가져오고 이것을 String으로 바꿔주기 위한 

toString()메서드를 이용합니다. 

intent.putExtra를 이용해서 str을 넘겨줍니다.

 

SubActivity.java

public class SubActivity extends AppCompatActivity {

    private TextView tv_sub;

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

        tv_sub = findViewById(R.id.tv_sub);

        Intent intent = getIntent();
        String str = intent.getStringExtra("str");

        tv_sub.setText(str);

    }
}

 

tv_sub은 Sub화면의 변수입니다. findViewById를 해서 id를 가져오고 설정을 해줍니다.

Intent를 정의하는데 getIntent(); 메서드를 사용합니다.

 

getIntent()는 Intent로 값이 넘어오는 것을 받습니다. 

intent.putExtra("str"); 해서 넘어온 값을 이번엔 SubActivity에서 

intent.getStringExtra("str"); 로 값을 str 변수에 넣어줍니다.

이것을 tv_sub의 표시해주는 란에 setText를 이용해서 값을 표시해줍니다.

반응형

댓글