728x90

저번에 xml까지 제작을 해봤다. 사실 이까지는 리소스이므로 그냥 껍데기일 뿐이다.
즉 여러분은 화면에 보여주는 껍데기까지만 만들었다는 것이다.
따라서 이번에는 껍데기 뿐인 xml에 생명을 불어 넣어줄 것이다. 이러한 프로그래밍을 이벤트기반 프로그래밍이라고 한다.
이벤트기반프로그래밍에 대한 설명을 한번 블로그에 개시한적이 있으므로 참고하도록하자(참고: 이벤트기반 프로그래밍)

일단 간단한 View를 만들어 보도록하자.

<?xml version="1.0" encoding="utf-8"?>
<!--activity_main.xml-->
<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="com.jiharu.myapp.MainActivity"
android:orientation="vertical">

<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1.00"
android:text="Button" />

<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1.00"
android:gravity="center"
android:text="TextView" />
</LinearLayout>

위와 같은 코드를 작성하자. 물론 일일히 다 작성안하고 design에서 바꿀수도 있다.



이러한 코드를 작성했다고 치자. 여기서 중요한건 얘들은 실행해봐야 껍데기라는 것이다.

따라서 xml을 사용하는 클래스에 이벤트를 부여해줘야한다.

위에 자세히보면 레이아웃에 이 구문이 있다.

tools:context="com.jiharu.myapp.MainActivity"

이것은 해당 클래스에서 이 레이아웃을 사용한다는 이야기이다.

따라서 해당 클래스(이하 액티비티라고 하겠다.)에 연결해야한다.

/*MainActivity.java*/
package com.jiharu.myapp;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

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

해당 액티비티는 일단 아무것도 내용에 없다.

onCreate는 안드로이드가 켜지는 순간 작동하는 메소드이므로 이 메소드를 수정하면된다.

setContentView라는 메소드에 activity_main이 보인다.

자바에서는 xml이, xml에서는 자바가 서로 연결되어 있음을 이 코드를 통해서 확인할 수 있다.


일단 가장 먼저 해야할일은 껍데기뿐인 버튼과 텍스트뷰를 불러오는 것이다.

그 예제는 아래와 같다.

/*MainActivity.java*/
package com.jiharu.myapp;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.button);
TextView tv = (TextView) findViewById(R.id.textView);
}
}

findViewById메소드를 선언하면 해당 xml의 요소들을 불러 올 수 있다.

이때 중요한건 id를 통해서 불러오는 것이다. 해당 위젯의 id는 여러분이 만든 xml에서 확인할 수 있다.

이제 연결이 끝났다. 가볍게 이벤트를 붙히면 완성인데 버튼을 누른 횟수를 텍스트뷰에 표시되게 해보자.

/*MainActivity.java*/
package com.jiharu.myapp;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
private int count = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

final Button btn = (Button) findViewById(R.id.button);
final TextView tv = (TextView) findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
tv.setText(++count+"");
}
});
}
}

여기서 한가지 중요한건 반드시 setText메소드내부의 값은 문자열이여야한다.

문자열이 아니더라도 당장은 에러가 안나는데 실행하면 에러가 뜨면서 종료된다.


보다시피 버튼을 클릭할 때마다 숫자가 증가함을 볼 수 있다.

위의 코드는 익명함수를 사용하면 조금은 줄일 수 있다.

/*MainActivity.java*/
package com.jiharu.myapp;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
private int count = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

final Button btn = (Button) findViewById(R.id.button);
final TextView tv = (TextView) findViewById(R.id.textView);
btn.setOnClickListener((View view)->{tv.setText(++count+"");});
}
}

익명함수는 바로 적용이 안되는데(되는 경우도 있다고 하는데 필자는 바로 된적이 없음) 적용을 시켜줘야한다.



'Programming > Java-Android' 카테고리의 다른 글

[Android-06]Toast  (0) 2017.12.01
[Android-05]Event - Click,Touch  (0) 2017.12.01
[Android-04]Layout  (0) 2017.11.30
[Android-02]View를 Activity에 삽입하기  (0) 2017.09.04
[Android-01]기본적인 프로젝트의 이해  (0) 2017.09.03

+ Recent posts