Notice
Recent Posts
Recent Comments
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Adagio non molto

[Android] Button 만들기 - 코드 분석 본문

Study/JAVA

[Android] Button 만들기 - 코드 분석

마르카토* 2011. 12. 21. 00:51
일단 XML 파일의 이름은 main이고 중요하진 않지만 코드는 아래와 같다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    >
<EditText 
        android:id="@+id/edit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="여기다 입력"
        />
<Button 
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="입력 완료"
        />

</LinearLayout>

하지만 이 xml파일로 컴파일 하면 'inputType이 명시되어 있지 않습니다.'라고 추측되는 경고가 뜬다.
그냥 가볍게 넘어가기로 했다. (xml을 분석하려하면... 받아들이자 !)


문제는 책에서 '아주 쉬운 코드'인 .java 파일이다. 소스는 다음과 같다.
import android.app.*;
import android.os.*;
import android.widget.*;
import android.view.*;

public class Rerecopybutton extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Button btn=(Button)findViewById(R.id.btn);
        btn.setOnClickListener(new Button.OnClickListener(){
        public void onClick(View v){
        EditText edit=(EditText)findViewById(R.id.edit);
        String str=edit.getText().toString();
        Toast.makeText(Rerecopybutton.this, str, Toast.LENGTH_SHORT).show();
        }
        });
    }
}

솔직히, 저 진하게 처리된 부분을 완전히 이해하지 못하겠다. 그래서 developer에 들어가봤다.
http://developer.android.com/reference/android/widget/Button.html 
코드가 똑같다. 슬프다..
그냥 이렇게 쓰는 듯하다.

그래서 오버라이딩(?)이라고 생각하고 OnClickLinstener 메소드를 다시 검색해서 찾아봤다.
클릭하면 매개변수로 받은 view를 보여주는 메소드... ㅡ_ㅡ;;

자바실력이 부족해서 이해는 못하겠지만 저런식으로 메소드를 사용하는 듯 하다.
파란색은 버튼객체 btn의 이벤트 처리 코드 이다.
저부분은 에디트 객체를 찾고, 에디트 객체가 가진 문자열을 받고, 토스트로 출력하는 단계라고 이해했다.

세상에 버튼하나 만드는게 이리 어렵다니. 이게 아주 쉬운거라니...;; 


P.S setOnClickListener 메소드에 관해서 추가
http://blog.naver.com/giveupyou?Redirect=Log&logNo=20144513301 에서 퍼옴.

setOnClickListener를 통해 버튼 클릭시 onClick메소드를 이용하여 이벤트구현.

1.이렇게 구현하면 리스너를 연결한 후 리스너 부분을 따로 구현하여 보기편하다.

 

버튼.setOnClickListener(리스너이름); // 버튼 클릭시 OnClickListener와 연결.

 

View.OnClickListener 리스너이름 new OnClickListener() {   //리스너인터페이스

public void onClick(View v) {                            //onClick메소드(클릭시이벤트)를 구현

}

};                             

 

2.만약 OnclickListener를 상속받아서 사용할 경우 리스너를 따로 선언하지 않아도 된다.

 

public class Test extends Activity implements OnClickListener //onClickListene

{                                                             //r상속

버튼.setOnClickListener(this){

public void onClick(View v) {

}

}  };                             //따로 리스너를 선언하지 않아도 상속받아서 사용

 

3.흔히 보는 유형으로 리스너 이름부분에 new를 사용하여 바로 코딩법

 

버튼.setOnClickListener(new View.OnClickListener() {

public void onClick(View view) {

}

});

developer에서 소개된 방법은 3번의 '흔히'보는 유형이군요.. ㅜㅜ 
 
Comments