Monitor-based event handling mechanism

Three elements of monitoring

    Event Source Event Source

    Event event

    Event Listener Event Listener

btnTextEvemt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG,"---OnClick---");
            }
        });

    btnTextEvent event source

    OnClickListener event listener

How to implement monitoring

    Implemented by inner class

public class MainActivity extends AppCompatActivity {
private Button mBtnEvent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);
        setContentView(R.layout.activity_main);
mBtnEvent = findViewById(R.id.btn_event);
mBtnEvent.setOnClickListener(new OnClick());

    }
    class OnClick implements View.OnClickListener{//Inner class
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btn_event:
                    Toast.makeText(MainActivity.this, "click...", Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    }
}

    Implemented by anonymous inner class

public class MainActivity extends AppCompatActivity {
private Button mBtnEvent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);
        setContentView(R.layout.activity_main);
        mBtnEvent = findViewById(R.id.btn_event);
        mBtnEvent.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                Toast.makeText(MainActivity.this, "click...", Toast.LENGTH_SHORT).show();
                }
        });
    }
}

    Implemented by the class where the event source is located

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button mBtnEvent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);
        setContentView(R.layout.activity_main);
        mBtnEvent = findViewById(R.id.btn_event);
        mBtnEvent.setOnClickListener(MainActivity.this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_event:
            Toast.makeText(MainActivity.this, "click...", Toast.LENGTH_SHORT).show();
            break;
        }
        }
}

    Implemented by external class

public class MainActivity extends AppCompatActivity {
private Button mBtnEvent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);
        setContentView(R.layout.activity_main);
        mBtnEvent = findViewById(R.id.btn_event);
        mBtnEvent.setOnClickListener(new MyClick(MainActivity.this));

    }

}
        Outer class:
public class MyClick implements View.OnClickListener{
    private Activity mActivity;
    public MyClick(Activity activity){
    this.mActivity = activity;
    }
    @Override
    public void onClick(View v) {
        Toast.makeText(mActivity,"click...",Toast.LENGTH_SHORT).show();
    }
}

    The onClick attribute in the layout file (for click events)

public class MainActivity extends AppCompatActivity {
private Button mBtnEvent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);
        setContentView(R.layout.activity_main);
        mBtnEvent = findViewById(R.id.btn_event);


    }
    public void show(View v){
        switch (v.getId()){
            case R.id.btn_event:
                Toast.makeText(MainActivity.this,"click...",Toast.LENGTH_SHORT).show();
                break;
        }
    }
}
    <Button
        android:id="@+id/btn_event"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="click me"
        android:textAllCaps="false"
        android:onClick="show"/>

Use onClick show method

What about adding multiple listeners of the same type to the same event source?

public class MainActivity extends AppCompatActivity {
private Button mBtnEvent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);
        setContentView(R.layout.activity_main);
        mBtnEvent = findViewById(R.id.btn_event);
        mBtnEvent.setOnClickListener(new OnClick());
        mBtnEvent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {//Anonymous inner class
                Toast.makeText(MainActivity.this, "click...", Toast.LENGTH_SHORT).show();
                Log.d("Anonymous inner class","click");
            }
        });

    }
    class OnClick implements View.OnClickListener{//Inner class
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btn_event:
                    Log.d("Inner class","click");
                    Toast.makeText(MainActivity.this, "click...", Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    }
}

The system responds to the last listener, whoever runs behind it! ! !

The onClick attribute (for click events) in the layout file has the lowest priority

      

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325722977&siteId=291194637