청취 기반 이벤트 처리 메커니즘


이 섹션 소개:

2장에서는 이러한 컨트롤을 사용하여 아름다운 인터페이스를 만들 수 있지만 다음 단계는 논리와 비즈니스 구현을 배우는 것입니다. . 이 장에서는 Android의 이벤트 처리 메커니즘을 설명합니다! 이벤트 처리 메커니즘이란 무엇입니까? 예를 들어보세요 버튼 클릭과 같은 간단한 예를 들어, 서버에 로그인 요청을 보냅니다! 물론 Android에는 이러한 종류의 이벤트 처리 메커니즘 이상의 기능이 있습니다. 예를 들어 화면에서 선택이 발생하면 화면의 특정 영역을 클릭합니다. 간단히 말해서 이벤트 처리 메커니즘은 UI와 상호 작용할 때 장면 뒤에서 몇 가지 작은 작업을 추가하기만 하면 됩니다. ! 이 섹션에서는 가장 자주 사용되는 것, 즉 청취 기반 이벤트 처리 메커니즘을 소개합니다!


1. 모니터링 기반 시간 처리 메커니즘 모델:

프로세스 모델 다이어그램:

1.jpg

텍스트 설명:

이벤트 모니터링 메커니즘은 이벤트 소스로 구성됩니다. 이벤트 , 이벤트 리스너는 세 가지 유형의 객체로 구성됩니다. 처리 흐름은 다음과 같습니다.1단계:이벤트 소스(구성 요소)에 대한 리스너를 설정하여 사용자 작업을 수신합니다.2단계:사용자 작업이 이벤트 소스의 리스너를 트리거했습니다.3단계:생성됨 해당 이벤트 객체4단계:이 이벤트 소스 객체를 이벤트 리스너에 매개변수로 전달합니다.5단계:이벤트 리스너는 이벤트 객체를 판단하고 해당 이벤트 프로세서(해당 이벤트 처리 방법)를 실행합니다

요약:

이벤트 수신 메커니즘은 이벤트 소스(구성 요소) 이벤트 처리가 이벤트 리스너에 위임되는 위임된 이벤트 처리 메커니즘입니다. 이벤트 소스에서 지정된 이벤트가 발생하면 지정된 이벤트 리스너에게 알림이 전달되고 해당 작업이 수행됩니다.


2. 다섯 가지 사용 형태:

다음 중 하나를 사용합니다. 간단한 버튼 클릭 토스트 정보 프로그램을 프롬프트하세요 ;5가지 다른 양식을 사용해 보세요!

렌더링:

2.png


1) 익명 내부 클래스를 직접 사용

가장 일반적으로 사용되는 클래스: XxxListener를 직접 설정하고 내부 메서드를 다시 작성합니다. 일시적으로 한 번만 사용하는 경우가 많아 재사용성이 낮습니다!

구현 코드는 다음과 같습니다. MainActivity.java:

패키지 com.jay.example.innerlisten;    
    
import android.os.Bundle;    
android.view.View 가져오기;    
android.view.View.OnClickListener 가져오기;    
android.widget.Button 가져오기;    
android.widget.Toast 가져오기;    
android.app.Activity 가져오기;    
    
    
public class MainActivity는 Activity를 확장합니다 {    
    private Button btnshow;    
       
    @Override    
    protected void onCreate(Bundle savedInstanceState) {    
        super.onCreate(savedInstanceState);    
        setContentView(R.layout.activity_main);    
        btnshow = (버튼) findViewById(R.id.btnshow);    ㅋㅋㅋ  public void onClick(View v) {    
                //显示Toast信息    
               Toast.makeText(getApplicationContext(), "你点击了按钮", Toast.LENGTH_SHORT).show();    
           }    
        });    
    }        
}


2) 내부 클래스 사용

은 위의 익명 내부 클래스와 다릅니다! 사용의 장점: 이 클래스에서 재사용할 수 있으며 외부 클래스의 모든 인터페이스 구성 요소에 직접 액세스할 수 있습니다!

구현 코드는 다음과 같습니다. MainActivity.java:

package com.jay.example.innerlisten;
import android.os.Bundle
import android.view.view; . 보기. OnClickListener;
import android.widget.Toast;
import android.app.Activity;
@Override
protected void onCreate(Bundle selectedInstanceState ) ~ ~ onCreate(); //내부 클래스 객체를 매개변수로 직접 새로 만들기
                                     (new BtnClickListener());
} }
//내부 클래스 정의, View.OnClickListener 인터페이스 구현 및 onClick() 메서드 재정의
BtnClickListener 구현 View.OnClickListener {
@Override
public void onClick(View v) {
                                                                                     using using –                                       through '     through through 's through off ‐ off ‐ ‐ ‐ � � ‐ ‐ toast.makeText(getApplicationContext(), "버튼이 클릭되었습니다.", Toast.LENGTH_SHORT).show();

3) 외부 클래스 사용:

이벤트를 처리하기 위해 또 다른 Java 파일을 만드는 것입니다. 외부 클래스는 사용자 인터페이스에 직접 액세스할 수 없기 때문에 클래스의 구성 요소는 생성 메서드를 통해 전달되어야 하며 그 결과 코드가 충분히 간결하지 않게 됩니다.

ps: 매개변수 전달을 보여주기 위해 여기에서는 토스트 프롬프트 대신 TextView가 사용됩니다!

3.png

구현 코드는 다음과 같습니다. MyClick.java:

package com.jay.example.innerlisten;
import android.view.View
import android.view.View.OnClickListener; import android.widget.TextView; w txt)
{) textShow = txt;}}@@Override
public void onclick (View v) {
                                                                                                                             사용   with use with using                   '' ' out's ' out's out's out out out way outmb out out outole out out out out out out out out of  to 's' t t          

MainActivity.java

package com.jay.example.innerlisten;    
android.os.Bundle 가져오기;    
android.widget.Button 가져오기;    
android.widget.TextView 가져오기;    
android.app.Activity 가져오기;    
    
    
public class MainActivity는 Activity를 확장합니다 {    
    private Button btnshow;    
    비공개 TextView txtshow;    
    @Override    
    protected void onCreate(Bundle savedInstanceState) {    
        super.onCreate(savedInstanceState);    
        setContentView(R.layout.activity_main);    
        btnshow = (버튼) findViewById(R.id.btnshow);    
        txtshow = (TextView) findViewById(R.id.textshow);    
        //直接new一个외부부类,并把TextView작성자参数传入   
        btnshow.setOnClickListener(new MyClick(txtshow));    
    }         
}

4) Activity를 이벤트 리스너로 직접 사용

Activity 클래스가 XxxListener 이벤트 수신 인터페이스를 구현하도록 하고 Activity에서 해당 이벤트 핸들러 메서드를 정의하고 재정의하기만 하면 됩니다. 예: Activity는 OnClickListener 인터페이스를 구현하고 onClick(view) 메서드를 재정의하며 특정 구성 요소에 대한 이벤트 수신 개체를 추가합니다. Xxx.Listener(this)를 직접 설정하세요

구현 코드는 다음과 같습니다.MainActivity.java:

package com.jay.example.innerlisten;
import android.os.Bundle;
import android.view.View.OnClickListener;
import android.app.Activity;
public class MainActivity는 Onclicklistener를 구현합니다. BTNSHOW; (Savedinstancestate);
SetContentView (R.Layout.activity_main); .id.btnshow);                                                  > 토스트.LENGTH_SHORT).show ();

5) 라벨에 직접 바인딩:

은 xml 레이아웃 파일의 해당 Activity에 이벤트 처리 방법을 직접 정의하는 것입니다. 예:public void myClick(소스 보기) 소스는 이벤트 소스(구성 요소)에 해당합니다. 그런 다음 이벤트를 트리거하는 구성 요소에 해당하는 레이아웃 파일에서 속성을 설정합니다. onclick = "myclick"

구현 코드는 다음과 같습니다. MainActivity.java:

package com.jay.example.caller ;

import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle selectedInstanceState) {
              super.onCreate(savedInstanceState);      
          setContentView(R.layout.activity_main) )                                                              getApplicationContext(), "버튼이 클릭되었습니다.", Toast.LENGTH_SHORT).show()
}
}

main.xml 레이아웃 파일:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android. com/tools "o android: ID ="@+ID/line/linearlayout1 "
Android:layout_width =" match_parent "
Android:layout_heigh_parent"
Android D: Orientation = "vertical" & gt;
& lt; :layout_width = "wrap_content"
Android:layout_height = "wrap_content"
android: text = "button"
Android: Onclick = "MyClick"/& LT;/LineArlayou T & GT; 그 예로는 onClickListener 클릭 이벤트가 있습니다. 물론 이 외에도 onItemClickListener와 같은 다른 이벤트도 있습니다. setXxxListener가 필요한 모든 것은 기본적으로 이벤트 모니터링을 기반으로 합니다. 게다가 상황에 따라 1, 2, 3, 5번의 5가지 방법이 더 일반적으로 사용됩니다~