2012-01-12 3 views
4

이클립스에서 안드로이드 프로그래밍을 시작했는데 이것에 대해 조금 어이가 없었습니다. 여기에 버튼 프로그래밍이이 책에 쓰인 두 가지 방법이 있습니다. 첫 번째 방법이 더 간단하고 짧아 보이는 것을 제외하고는 모두 잘 작동합니다. 어느 쪽이 더 낫고 왜?두 버튼의 차이점은 무엇입니까? 안드로이드 프로그래밍

View newButton = findViewById(R.id.main_new_button); 
newButton.setOnClickListener(this); 


Button newButton= (Button) this.findViewById(R.id.main_new_button); 
newButton.setOnClickListener(this); 

답변

0

버튼은 TextView를 확장하는 위젯입니다. TextView는 뷰를 확장합니다. Button 클래스를 사용하면 위에 언급 한 수퍼 클래스가 아닌보다 구체적인 멤버 함수에 노출됩니다. 그 구체적인 방법이 무엇인지 ... 당신은 안드로이드에 가야 할 것입니다. 위젯. 이렇게하면 (버튼을 명시 적으로 선언하기 위해) 세 개의 생성자가 표시됩니다. 다른 모든 멤버 함수는 동일합니다. 당신이 3 개월, 또는 당신과 함께 측면을 따라 작동하는 다른 개발자 후 다시이 코드에 올 때 선 아래로 자신을 혼동하지 않으려면

public Button(android.content.Context context); 
public Button(android.content.Context context, android.util.AttributeSet attrs); 
public Button(android.content.Context context, android.util.AttributeSet attrs, int defStyle); 

는하지만, 두 번째 방법은 사용하기에 적합한 방법이다 :

1

두 양식은 동일합니다. 두 경우 모두 findViewByIdView 개체를 반환하지만 두 번째 버전에서는 명시 적 형 변환이 Button이고, 하위 클래스는 View입니다. 당신은 documentation에서 볼 수 있듯이

ViewTextView의 슈퍼 클래스이며, TextViewButton의 슈퍼 클래스입니다.

어느 것이 더 낫습니까? 그것은 달려있다. Button과 관련된 기능을 사용해야 할 경우 두 번째 방법을 사용하는 것이 좋습니다. 반면에 View 개체이면 충분하므로 첫 번째 방법을 사용하십시오.

0

버튼을 원하면 후자의 구성이 필요합니다. Formmer 형성은 괜찮지 만 완벽한 방법은 아닙니다. 왜냐하면 뷰의 사용법은 버튼에 대한 것이 아니기 때문입니다.

0

두 번째 경우에는 결과를 올바른 유형으로 캐스팅해야합니다. 이렇게하면 Button 특정 방법에 액세스 할 수 있습니다. 첫 번째 것은 Button이지만 View 개체 만 반환합니다. 따라서 Button 특정 기능에 액세스 할 수 없습니다.

+0

난 그냥 Button'가 자신의 공개 방법을 정의하지 않는 '것으로 나타났습니다 얻었다 바랍니다. 'Button'은'TextView'에서 확장 되었기 때문에 나의 관점은 여전히 ​​유지되고 있습니다. – curioustechizen

0

보기로 작성된 단추는보기이며 단추 위젯이 아닙니다.보기 클래스에서 단추를 작성하면 단추 클래스의 기능을 호출 할 수 없습니다. 보기 클래스와 단추 클래스는 모두 "setOnClickListener"함수를 가지고 있지만보기 클래스의 해당 함수는 Button의 것과 동일하지 않습니다.

1

내가 thinking.In 안드로이드의 길을 좋아하는 모든 위젯 view.I이 step--

1)

우선 중요한 것은 당신을 말할 것입니다 모든 버튼은보기이다 그러나 반드시 모든보기는해야 버튼

View newButton = findViewById(R.id.main_new_button); 
    newButton.setOnClickListener(this); 

당신이 newButton이 전을위한 Button.We 수 stroe 어떤보기 참조 (항상 것을 의미하지 않습니다를 사용하고 있습니다.있는 LinearLayout, newButton

로하여 ImageButton 등) 그러나 두 번째 경우

Button newButton= (Button) this.findViewById(R.id.main_new_button); 
newButton.setOnClickListener(this); 

newButton는 R.id.main_new_button는 XML의 버튼 ID

2) 인 경우 버튼해야 확실히 -

내가 말했듯이 모든 버튼은 뷰이지만 버튼은 어떤 뷰인지 알지 못합니다. 그렇다면 findViewByid를 캐스팅하라는 것입니다. 그리고 모든 뷰가 자신의 메소드를 가지고 있기 때문에 첫 번째 케이스가 권장하지 않습니다. 이 view.Ralize.So 우리는 구체적으로 버튼을 사용해야합니다.

은 당신이

+0

문제를 해결하는 데 도움이 되었습니까? 대답을 받아 들일 수있는 질문을 생각해 보라. – Sameer

관련 문제