您的位置:首页 > 其它

事件监听器

2016-07-16 19:39 239 查看

事件监听器

每个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>


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

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
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: