Android学习之自定义EditText实现延时保存
来源:互联网 发布:java种颜色代码 编辑:程序博客网 时间:2024/06/10 07:39
每次想要实现EditText更改后保存数据,都给EditText添加addTextChangedListener事件。但是由于输入比较长的数据时在中间过程中都会触发TextWatcher,从而每次都重复保存不必要的数据。为此自定义一个MyEditText继承EditText然后实现延时保存,减少在更改过程中保存数据的次数。实现比较简单,在此做个记录:
继承EditText实现延时触发更改事件:
package com.edittextdemo;import android.annotation.SuppressLint;import android.content.Context;import android.os.Handler;import android.os.Message;import android.text.Editable;import android.text.TextWatcher;import android.util.AttributeSet;import android.util.Log;import android.widget.EditText;public class MyEditText extends EditText {private String TAG = "MyEditText";private static final int MSGCODE = 0x12121212;private mTextWatcher textWatcher = new mTextWatcher();private String text;private int msgCount = 0;public MyEditText(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stubthis.addTextChangedListener(textWatcher);}private onTextChangerListener listener = null;public void setOnTextChangerListener(onTextChangerListener listener) {this.listener = listener;}public interface onTextChangerListener {public void onTextChanger(String text);}private class mTextWatcher implements TextWatcher {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after) {// TODO Auto-generated method stub}@Overridepublic void onTextChanged(CharSequence s, int start, int before,int count) {// TODO Auto-generated method stub}@Overridepublic void afterTextChanged(Editable s) {// TODO Auto-generated method stubtext = s.toString();Log.e(TAG, "text = " + text);msgCount++;Message msg = new Message();msg.what = MSGCODE;mHandler.sendMessageDelayed(msg, 3 * 1000);}}/** * 防止调用setText时重新触发TextWatcher事件 * * @param text */public void MySetText(String text) {removeTextChangedListener(textWatcher);setText(text);addTextChangedListener(textWatcher);}Handler mDelayedHandler = new Handler();@SuppressLint("HandlerLeak")Handler mHandler = new Handler() {public void handleMessage(Message msg) {if (msg.what == MSGCODE) {if (msgCount == 1) {if (listener != null) {listener.onTextChanger(text);}msgCount = 0;} else {msgCount--;}}}};}
<com.edittextdemo.MyEditText android:id="@+id/et_test" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20.0dip" />
MainActivity调用控件并实现事件监听:
package com.edittextdemo;import com.edittextdemo.MyEditText.onTextChangerListener;import android.app.Activity;import android.os.Bundle;import android.util.Log;public class MainActivity extends Activity {private String TAG = "MainActivity";private MyEditText et_test = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et_test = (MyEditText) findViewById(R.id.et_test);et_test.setOnTextChangerListener(new onTextChangerListener() {@Overridepublic void onTextChanger(String text) {// TODO Auto-generated method stubLog.e(TAG, "text = " + text);et_test.MySetText(text);}});}}
0 0
- Android学习之自定义EditText实现延时保存
- android自定义控件之edittext
- Android控件之自定义EditText
- Android学习之EditText
- Android学习之EditText
- android之控件EditText学习
- Android EditText学习之 inputType
- Android之EditText控件学习
- Android UI学习之EditText
- android学习笔记之editText
- Android开发之延时跳转实现方法
- Android自定义View之金额输入EditText
- Android UI设计之<三>自定义EditText,实现带清除功能的输入框
- android自定义View之自定义EditText(添加删除功能)
- Android自定义View之自定义EditText(添加删除功能)
- android自定义View之自定义EditText(添加删除功能)
- QT之实现延时
- android 延时实现
- Single Number II (leetcode)
- hdu 超级密码 1226
- leetcode 之 String to Integer (atoi)
- HTTP头域列表与解释 之 response篇
- 《王坚:云计算和大数据,你们都理解错了》--潘越飞 读后感
- Android学习之自定义EditText实现延时保存
- java.net.Decoder、java.net.Encoder
- 在一个service中启动一个activity
- centos6.5主机下虚拟XP_sp3
- 对于刚开始学习Java的人一点建议
- LINQ to XML简介(1)
- Cocos2d-js 学习笔记<一> 环境搭建
- 获取属性值
- HTTP头域列表与解释 之 request篇