事件监听器
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 } });
相关文章推荐
- Spark 1.6.2 + Hadoop 2.7.2 集群搭建
- Extjs怎么使用一个Extjs控件
- Codeforces 591B Rebranding
- 前端工作中一些关于hosts的简单设置
- popuwindow
- CNN
- hibernate多对多关系映射
- 18. 4Sum
- Pineapple Incident,Barnicle,Lorenzo Von Matterhorn(cf#362)
- STL之四:list用法详解
- 页面标签处理方法
- poj 1236 Network of Schools
- BZOJ 1984 月下“毛景树”
- hdu1397Goldbach's Conjecture(素数筛打表+二分)
- Codeforces 602A Two Bases
- STL之三:deque用法详解
- STL之二:vector容器用法详解
- POJ-2502 Subway( 最短路 )
- 给你推荐个软件----印象笔记(everNote)
- Android studio gradle 环境变量配置