__________     __ __     __  _______    ________
  / ____/ __ \   / // /    / / / /  _/ |  / / ____/
 / / __/ / / /  / // /_   / /_/ // / | | / / __/
/ /_/ / /_/ /  /__  __/  / __  // /  | |/ / /___
\____/\____/     /_/    /_/ /_/___/  |___/_____/

 --- A GOPHER-LIKE INTERFACE FOR HIVE BLOCKCHAIN ---

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

BY: @jeonghamin | CREATED: Jan. 26, 2018, 3:44 a.m. | VOTES: 2 | PAYOUT: $0.00 | [ VOTE ]

[IMAGE: https://steemitimages.com/DQmSY5jrYYD8htaNrf6ASzrhfg3q1zqkoc3KJK7GEF3P9nB/android_title_image.jpg]

Button

Button은 디바이스 화면(UI)에서 사용자의 이벤트(Click)를 처리하는 가장 기본적인 뷰입니다. 기본적으로 가장 많이 쓰이는 이벤트 처리는 click과 LongClick이 있습니다. 이 이외에도 Focus, Key, Touch 등 다양한 이벤트 처리가 있습니다. MVVM에서 click과 LongClick을 이용한 이벤트 처리 방식을 알아보도록 하겠습니다.

OnClickListener Event

미리 View클래스에 정의된 Listener인터페이스를 이용한 등록방법 입니다. ListenerEvent는 3가지 등록 방식이 있습니다.

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


인터페이스를 이용하기 때문에 onClick() 메소드를 반드시 정의 해야합니다. XML의 OnClick 속성 역시 여러 뷰에 이벤트 등록이 가능합니다. 또한 OnClick리스너 이벤트를 등록 할 수 있는 모든 뷰에 적용 가능합니다.

public class ButtonExampleViewModel extends BaseObservable
        implements View.OnClickListener {

    @Override
    public void onClick(View v) {
    }
}

XML

MVVM 인터페이스 리스너방식은 기존 방식과 유사하지만 반드시 ViewModel의 메소드를 참조하는 @{vm::onClick}형태로 등록해야 합니다.

View.OnClickListener onClick = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    }
};

    button1.setOnClickListener(onClick);
    button2.setOnClickListener(onClick);
    button3.setOnClickListener(onClick);

OnClick리스너 이벤트를 등록 할 수 있는 모든 뷰에 적용 가능합니다.

public View.OnClickListener onClick = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    }
};


MVVM 인터페이스 참조 객체에서 참조 객체 생성은 기존 방식과 동일합니다. 다른 점이 있다면 ViewModel에서 참조된 변수 혹은 메소드는 항상 public이여야 합니다. 그리고 XML에서 onClick대신 android:onClickListener속성을 사용합니다.

인터페이스 리스너참조 객체의 공통점은 여러 뷰에 Click이벤트를 등록할 수 있다는 점입니다. 다만 다른 뷰의 이벤트를 구별하기 위해서는 v.getId()메소드를 이용해서 뷰의 id값을 받아 구별하면 됩니다.

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

하나의 뷰에 오직 하나의 이벤트를 등록하고자 할때는 바로 인터페이스 객체를 생성해 적용해 주면 됩니다.

XML onClick속성

이벤트를 정의한 메소드를 바로 뷰의 onClick 속성에 적용하는 방식 입니다.

    public void onClick(View v) {
    }


반드시 지켜야할 사항은 public을 사용하며 반환형파라미터 값을 이벤트 리스너 값과 동일하게 적용해야합니다.

    public void onClick(View v) {
    }


MVVM OnClick 속성방식은 기존 방식과 동일하지만 ViewModel의 메소드를 참조하는 @{vm::onClick}형태로 등록해야 합니다.

기존 onClick방식과 MVVM onClick방식에서 onClick에 적용하는 방법만 다르고 나머지는 모두 동일합니다.
가장 큰 차이점이 있다면 MVVM onClick방식은 컴파일 할때 오류 사실(public, 반환형,파라미터 불일치)을 알려주지만 기존 onClick방식은 이벤트가 발생할때 알 수 있습니다.

OnLongClickListener Event 및 XML onLongClick속성

OnClickListener Event 및 XML OnClick속성에서 OnLongClickListener 과 onLongClick속성을 사용된다는 점과 반환값을 꼭 true로 설정(false설정시 onClick 이벤트가 같이 발생)해야 된다는 점 빼고는 동일합니다.

TAGS: [ #kr ] [ #kr-dev ] [ #kr-newbie ] [ #jjangjjangman ] [ #android ]

Replies

@steemitboard | Jan. 11, 2019, 4:26 p.m. | Votes: 0 | [ VOTE ]

Congratulations @jeonghamin! You received a personal award!

https://steemitimages.com/70x70/http://steemitboard.com/@jeonghamin/birthday1.png1 Year on Steemit

Click here to view your Board

Do not miss the last post from @steemitboard:

SteemWhales has officially moved to SteemitBoard RankingSteemitBoard - Witness Update

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

@steemitboard | Jan. 11, 2020, 4:41 p.m. | Votes: 0 | [ VOTE ]

Congratulations @jeonghamin! You received a personal award!

https://steemitimages.com/70x70/http://steemitboard.com/@jeonghamin/birthday2.pngHappy 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!
[ BACK TO TRENDING ] [ BACK TO MENU ]
CMD>