监听三要素
Event Source 事件源
Event 事件
Event Listener 事件监听器
btnTextEvemt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d(TAG,"---OnClick---"); } });
btnTextEvent 事件源
OnClickListener 事件监听器
实现监听的方法
通过内部类实现
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{//内部类 @Override public void onClick(View v) { switch (v.getId()){ case R.id.btn_event: Toast.makeText(MainActivity.this, "click...", Toast.LENGTH_SHORT).show(); break; } } } }
通过匿名内部类实现
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(); } }); } }
通过事件源所在的类实现
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; } } }
通过外部类实现
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)); } }外部类:
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(); } }
布局文件中onClick属性(针对点击事件)
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"/>
使用onClick show方法
给同一个事件源添加多个同类型监听器会怎么样?
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) {//匿名内部类 Toast.makeText(MainActivity.this, "click...", Toast.LENGTH_SHORT).show(); Log.d("匿名内部类","click"); } }); } class OnClick implements View.OnClickListener{//内部类 @Override public void onClick(View v) { switch (v.getId()){ case R.id.btn_event: Log.d("内部类","click"); Toast.makeText(MainActivity.this, "click...", Toast.LENGTH_SHORT).show(); break; } } } }
系统响应最后的那个监听器,谁在后面就运行谁!!!
布局文件中onClick属性(针对点击事件)优先级最低