事件监听器

事件监听器

每个view都有多种可以绑定的事件监听器,可以使用setOnEvent 模式实现一个特定的事件监听类实现,对所有view都有效的包括:
setOnClickListener - 当view被点击的时候回调
setOnDragListener -当view被拖动时回调
setOnFocusChangeListener - 当view改变焦点的时候回调
setOnGenericMotionListener- 任意的手势时回调
setOnHoverListener -在视图上悬停的时候调用
setOnKeyListener - 当view有焦点时候按硬件键时候回调
setOnLongClickListener - 长时间按压时回调
setOnTouchListener- 触摸view回调

在java代码中

Button btnExample = (Button) findViewById(R.id.btnExample);
btnExample.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // Do something here    
    }

在XML文件中

使用android:onClick="sendMessage" 属性

<Button xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/button_send"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button_send"
    android:onClick="sendMessage" />

适配器view 事件的监听

对于AdapterView 也需要一些重要的监听器:
- setOnItemClickListener 当其中的一项被点击的时候
- setOnItemLongClickListener 当其中的一项长时间点击时
- setOnItemSelectedListener 当某项被选中时
问题: 有时当某一项过于复杂不能正确相应点击操作时,可能是因为项内的item获取了焦点,查看http://stackoverflow.com/questions/6703390/listview-setonitemclicklistener-not-working-by-adding-button并且在item布局文件中加入android:descendantFocusability = "blocksDescendants"

EditText 共同的监听器

除了上述的监听器,对于输入模块有几个特别的:
addTextChangedListener - 每当输入区域的内容改变时调用
setOnEditorActionListener - 当软键盘上的动作按钮被按压时调用

TextChangeListener

EditText etValue = (EditText) findViewById(R.id.etValue);
etValue.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // Fires right as the text is being changed (even supplies the range of text)
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
        // Fires right before text is changing
    }

    @Override
    public void afterTextChanged(Editable s) {
        // Fires right after the text has changed
        tvDisplay.setText(s.toString());
    }
});

OnEditorActionListener

可以在用户使用软键盘完成输入时需要做出动作时调用,首先我们需要建立一个动作按钮例如软件盘中”enter” 键

<EditText
   android:inputType="text"
   android:singleLine="true"
   android:imeOptions="actionDone"
   android:id="@+id/etValue"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content">
   <requestFocus />
</EditText>

特别的是,singleLineimeOptions 是输入按钮的要求,现在我们可以建立监听器了:

etValue.setOnEditorActionListener(new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_DONE) {
                        String text = v.getText().toString();
            Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show();
            return true;
        }
        return false;
    }
});

这适用于的情景:输入完成后明确要求展现一个动作的要求

Input View Listeners

与EditText相似,许多inputView有自己的监听器例如NumberPickers有setOnValueChangedListener 和SeekBar有setOnSeekBarChangeListener

NumberPicker npValue = (NumberPicker) findViewById(R.id.npValue);
npValue.setOnValueChangedListener(new OnValueChangeListener() {
    @Override
    public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
        // Changes based on number here
    }
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值