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