[Andoird] 6. MVVM에 Button사용하기!

in #kr7 years ago

android_title_image.jpg

<h1>Button <h4> <p dir="auto">Button은 디바이스 화면(UI)에서 사용자의 이벤트(Click)를 처리하는 가장 기본적인 뷰입니다. 기본적으로 가장 많이 쓰이는 이벤트 처리는 click과 LongClick이 있습니다. 이 이외에도 Focus, Key, Touch 등 다양한 이벤트 처리가 있습니다. MVVM에서 click과 LongClick을 이용한 이벤트 처리 방식을 알아보도록 하겠습니다. <h1>OnClickListener Event<h4> <p dir="auto">미리 View클래스에 정의된 Listener인터페이스를 이용한 등록방법 입니다. ListenerEvent는 3가지 등록 방식이 있습니다. <ul> <li>인터페이스 리스너방식 <pre><code>public class ButtonExampleActivity extends AppCompatActivity implements View.OnClickListener { @Override public void onClick(View v) { } } JAVA button1.setOnClickListener(this); button2.setOnClickListener(this); button3.setOnClickListener(this); [or] XML <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClick"/> <p dir="auto">인터페이스를 이용하기 때문에 <code>onClick() 메소드를 반드시 정의 해야합니다. XML의 OnClick 속성 역시 여러 뷰에 이벤트 등록이 가능합니다. 또한 OnClick리스너 이벤트를 등록 할 수 있는 모든 뷰에 적용 가능합니다. <pre><code>public class ButtonExampleViewModel extends BaseObservable implements View.OnClickListener { @Override public void onClick(View v) { } } XML <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="@{vm::onClick}"/> <p dir="auto"><strong>MVVM 인터페이스 리스너방식은 기존 방식과 유사하지만 반드시 <code>ViewModel의 메소드를 참조하는 <code>@{vm::onClick}형태로 등록해야 합니다. <ul> <li>인터페이스 참조 객체 <pre><code>View.OnClickListener onClick = new View.OnClickListener() { @Override public void onClick(View v) { } }; button1.setOnClickListener(onClick); button2.setOnClickListener(onClick); button3.setOnClickListener(onClick); <p dir="auto">OnClick리스너 이벤트를 등록 할 수 있는 모든 뷰에 적용 가능합니다. <pre><code>public View.OnClickListener onClick = new View.OnClickListener() { @Override public void onClick(View v) { } }; <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClickListener="@{vm.onClick}"/> <p dir="auto"><strong>MVVM 인터페이스 참조 객체에서 참조 객체 생성은 기존 방식과 동일합니다. 다른 점이 있다면 <code>ViewModel에서 참조된 변수 혹은 메소드는 항상 <code>public이여야 합니다. 그리고 XML에서 <code>onClick대신 <code>android:onClickListener속성을 사용합니다. <p dir="auto"><strong>인터페이스 리스너와<strong>참조 객체의 공통점은 여러 뷰에 Click이벤트를 등록할 수 있다는 점입니다. 다만 다른 뷰의 이벤트를 구별하기 위해서는 <code>v.getId()메소드를 이용해서 뷰의 id값을 받아 구별하면 됩니다. <pre><code> button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); <p dir="auto">하나의 뷰에 오직 하나의 이벤트를 등록하고자 할때는 바로 인터페이스 객체를 생성해 적용해 주면 됩니다. <h1>XML onClick속성<h4> <p dir="auto">이벤트를 정의한 메소드를 바로 뷰의 onClick 속성에 적용하는 방식 입니다. <pre><code> public void onClick(View v) { } <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClick"/> <p dir="auto">반드시 지켜야할 사항은 <strong>public을 사용하며 <strong>반환형및 <strong>파라미터 값을 이벤트 리스너 값과 동일하게 적용해야합니다. <pre><code> public void onClick(View v) { } <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="@{vm::onClick}"/> <p dir="auto"><strong>MVVM OnClick 속성방식은 기존 방식과 동일하지만 <code>ViewModel의 메소드를 참조하는 <code>@{vm::onClick}형태로 등록해야 합니다. <p dir="auto"><strong>기존 onClick방식과 <strong>MVVM onClick방식에서 onClick에 적용하는 방법만 다르고 나머지는 모두 동일합니다.<br /> 가장 큰 차이점이 있다면 <strong>MVVM onClick방식은 컴파일 할때 오류 사실(public, 반환형,파라미터 불일치)을 알려주지만 <strong>기존 onClick방식은 이벤트가 발생할때 알 수 있습니다. <h1>OnLongClickListener Event 및 XML onLongClick속성<h4> <p dir="auto">OnClickListener Event 및 XML OnClick속성에서 OnLongClickListener 과 onLongClick속성을 사용된다는 점과 반환값을 꼭 true로 설정(false설정시 onClick 이벤트가 같이 발생)해야 된다는 점 빼고는 동일합니다.
Sort:  

Congratulations @jeonghamin! You received a personal award!

1 Year on Steemit

Click here to view your Board

Do not miss the last post from @steemitboard:

SteemWhales has officially moved to SteemitBoard Ranking
SteemitBoard - Witness Update

Support SteemitBoard's project! Vote for its witness and get one more award!

Congratulations @jeonghamin! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 2 years!

You can view your badges on your Steem Board and compare to others on the Steem Ranking

Vote for @Steemitboard as a witness to get one more award and increased upvotes!