마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

초보질문드립니다- 안드로이드 findViewById 및 int 값

0 추천
xml에서

 

<TextView

android:id="@+id/abc"

android:clickable="true"

android:onClick="call"

android:layout_width:"wrap_content"

android:layout_height:"wrap_content"

android:text="@string/tel" />

 

java에서

 

public void call(View v) {

int id = v.getId();

}

 

이때 xml의 id는 aaa인데 왜 받아올 때 int로 값이 나오는지 궁금합니다.

혹시 해쉬맵처럼 aaa는 키이고 실제 값은 따로 있어서 그 값이 int형인가요?

 

 

그리고 지금 책의 예제를 보고 공부중인데 onclick 지정하고 java에서 받아오는 부분이거든요. 그런데

 

public void call(View v){

int id = v.getId();

TextView tv = (TextView)v.findViewById(id);

String tel = (String)tv.getText();

여기서는 findViewById를 쓸 때 앞에 v. 를 이용하는데

 

public void displayLargeImage(View v){

int id = v.getId();

LinearLayout layout = (LinearLayout)findViewById(id);

String tag = (String)layout.getTag();

 

여기서는 v.가 없이 그냥 쓰여서

같은 원리인 것 같은데

둘의 차이점이 궁금합니다-

 

좋은 하루 되세요!!
꿈나무1 (160 포인트) 님이 2015년 7월 27일 질문

1개의 답변

+1 추천
 
채택된 답변

1. 혹시 해쉬맵처럼 aaa는 키이고 실제 값은 따로 있어서 그 값이 int형인가요?

맞습니다. xml 파일에 선언된 ID를 기준으로 gen 폴더에 R.java 파일이 자동 생성되며,

그 파일에 매핑되는 int값이 들어 있습니다.

 

2. 여기서는 v.가 없이 그냥 쓰여서 같은 원리인 것 같은데  둘의 차이점이 궁금합니다

-  어떤 view를 검색하냐의 차이일 뿐 비슷합니다. 

TextView tv = (TextView)v.findViewById(id); 의 경우  v 클레스에 붙어 있는 다른 레이아웃을 검색하기 위해 사용합니다. 

LinearLayout layout = (LinearLayout)findViewById(id); 호출 하는 것의 경우는

사전에   setContentView(R.layout.검색할 레이아웃 이름);  을 호출한 상황에서 사용하는 것으로,

이 메소드를 호출하면서 검색할 View를 미리 지정 했다고 보시면 될 듯 하네요.. 

 

 

사악미소 (65,330 포인트) 님이 2015년 7월 27일 답변
꿈나무1님이 2015년 7월 27일 채택됨
으아..
친절하고 빠른 답변 너무너무 감사드립니다.
속시원해졋네요 감사합니다!!!!^^
너무 감사드립니다!!!!!^^
...