基于监听的事件处理机制

监听三要素

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

      

猜你喜欢

转载自blog.csdn.net/castanea/article/details/80153189