监听三要素
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属性(针对点击事件)优先级最低