`
gryphone
  • 浏览: 433691 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

EditText 之内容监听器2

阅读更多

EditText 之内容监听

 

[功能]

以前写过通过 TextWatcher 监听 EditText 内容的改动 在知道那个之前 我都是通过 TextMonitor 监听其内容的更新 尽管现在其变得毫无意义 还是打算把之写下来

 

[原理]

* 2 个 thread:

写道
class TextUpdate extends Activity : 得到 EditText 的内容

class TextMonitor extends Service : 作为守护 负责监视 并返回EditText 的内容

 

 

* 原理

 

                       TextUpdate                TextMonitor
1.  Request                              <- 
2.  Reply                                   ->
3.  Notification                          <-




步骤:
1. TextMonitor 向 TextUpdate 发送 Message_Request 要求得到此刻 EditText 的内容

2. TextUpdate 收到 Message_Request 后 通过 EditText.getText() 得到此刻的字符串 并通过 Message_Reply 向 TextMonitor 发送 Broadcast

3. TextMonitor 在收到 Message_Reply 后 取出结果 并通过发送Broadcast 把结果通过 Message_Notification 返回结果

4. TextUpdat 在收到 Message_Notification  后 取出内容 然后刷新 TextView 内容

 

 

 

* 以上就是其全部原理

 

 

[代码 步骤]

 

1. 定义一些供 Broadcast & Message 用到的字符串

public class TextHelper {
	
	//broadcast definition
	public final static String Broadcast_Update = "Broadcast_Update";
	public final static String Broadcast_Monitor = "Broadcast_Monitor";
	
	//message definition
	public final static String Message_Request = "Message_Request";
	public final static String Message_Reply = "Message_Reply";
	public final static String Message_Notification = "Message_Notification";
}

 

 

 

2. 定义 TextMonitor 任务有:

写道
1. 发送 Message_Request

2. 发送 Message_Notification

3. 接收 Message_Reply

 

public void requestContent(){
		Intent i = new Intent(TextHelper.Broadcast_Update);
    	
    	Bundle b = new Bundle();
    	b.putString(TextHelper.Message_Request, "Hello!");
    	
    	i.putExtras(b);
    	sendBroadcast(i);
	}
	
	
	public void notificationContent(String s){
		Intent i = new Intent(TextHelper.Broadcast_Update);
    	
    	Bundle b = new Bundle();
    	b.putString(TextHelper.Message_Notification, s);
    	
    	i.putExtras(b);
    	sendBroadcast(i);
	}
	
	
	public class MonitorMessageListenerHelper extends BroadcastReceiver {
		Context context;
		
		MonitorMessageListenerHelper listener;
		//construct 
		public MonitorMessageListenerHelper(Context c){
			context = c;
			
			//to instance it
			listener = this;
		}
		
		public void registerAction(String action){
			IntentFilter filter = new IntentFilter();
			filter.addAction(action);
			
			context.registerReceiver(listener,filter);
		}
		
		@Override
		public void onReceive(Context arg0, Intent arg1) {
			// TODO Auto-generated method stub
			Bundle b = arg1.getExtras();
			
			if(b.containsKey(TextHelper.Message_Reply)){
				String string = b.getString(TextHelper.Message_Reply);
				
				if(! last.equals(string)){
					notificationContent(string);
					
					last = string;
				}
				
				requestContent();
			}
		}
		
	}

 

 

 

3. 定义 TextUpdate 任务有:

写道
1. 得到 EditText 的内容

2. 把得到的内容 在 TextView 中显示之


3. 把得到的字串 通过 Message_Reply 发送

4. 接收 Message_Request 后 得到目标内容

5. 接收 Message_Notification 并显示之

 

public String getContent(){
    	return edit.getText().toString();
    }
    
    
    public void displayContent(String s){
    	text.setText(s);
    }
    
    public void sendContent(String s){
    	Intent i = new Intent(TextHelper.Broadcast_Monitor);
    	
    	Bundle b = new Bundle();
    	b.putString(TextHelper.Message_Reply, s);
    	
    	i.putExtras(b);
    	sendBroadcast(i);
    }
    
    
    public class UpdateMessageListenerHelper extends BroadcastReceiver {
		Context context;
		
		UpdateMessageListenerHelper listener;
		//construct 
		public UpdateMessageListenerHelper(Context c){
			context = c;
			
			//to instance it
			listener = this;
		}
		
		public void registerAction(String action){
			IntentFilter filter = new IntentFilter();
			filter.addAction(action);
			
			context.registerReceiver(listener,filter);
		}
		
		@Override
		public void onReceive(Context arg0, Intent arg1) {
			// TODO Auto-generated method stub
			Bundle b = arg1.getExtras();
			
			if(b.containsKey(TextHelper.Message_Request)){
				sendContent(getContent());
			}
			else if(b.containsKey(TextHelper.Message_Notification)){
				String string = b.getString(TextHelper.Message_Notification);
				
				displayContent(string);
				
			}
		}
		
	}

 

 

 

 4. emulator 运行截图:

 

 

5. 其实程序不太完善 缺失下面功能:

* TextMonitor 会始终运行 即使 EditText 没有焦点 有时间再改下!

done!

分享到:
评论

相关推荐

    事件监听器-EditText的事件监听

    事件监听器是Android开发中的重要概念,用于捕捉和响应用户在界面上的各种交互操作。在Android中,事件监听器主要用于处理UI控件的点击、触摸、键盘输入等事件。本篇将详细介绍EditText的事件监听。 首先,我们来看...

    Android 监听EditText变化

    为了能够实时响应`EditText`中的文本变化,开发者通常会使用`TextWatcher`监听器。`TextWatcher`是一个接口,提供了三个方法,帮助我们监控`EditText`中文字的添加、删除和替换操作。下面我们将详细探讨`EditText`...

    EditText监听输入完成

    在Android开发中,`EditText` 是一个非常重要的组件,它允许用户输入文本并显示文本内容。在许多场景下,我们可能需要监听用户在`EditText`中的输入行为,特别是在用户完成输入后执行某些操作,比如验证输入内容、...

    EditText输入¥监听 删除及添加

    首先,我们需要创建一个 `EditText` 并为其设置监听器。`TextWatcher` 是一个接口,它包含三个方法:`beforeTextChanged`、`onTextChanged` 和 `afterTextChanged`。这三个方法分别在文本改变前、改变中和改变后被...

    Android中ListView多个Edittext获取输入内容.rar

    2. **EditText的监听器**:为每个EditText设置`TextWatcher`监听器,以便在用户输入时记录内容。可以在`afterTextChanged()`方法中获取到最新的输入值。 3. **数据模型**:创建一个数据模型类,它包含与EditText相...

    EditText一键清空内容

    这里,`setOnClickListener`为按钮添加了一个点击监听器,当按钮被点击时,`editText.setText("")`会清除`EditText`中的所有文本。 #### 1.2 使用`InputMethodManager`隐藏软键盘 除了清空文本,我们还可以同时...

    Android软件开发之EditText 详解源码

    3. **文本监听**:EditText提供了多种监听器,如`TextWatcher`,用于监听文本内容的改变。开发者可以通过`addTextChangedListener()`添加监听器,实时获取文本变化信息。 4. **输入类型与键盘控制**:`setInputType...

    自定义editText

    3. 在自定义EditText的构造函数中,找到并初始化删除按钮,设置点击事件监听器。当按钮被点击时,调用EditText的`setText("")`方法来清空文本。 4. 如果想要实现全局引用,可以将自定义的EditText控件封装到一个库...

    EditText焦点的自动跳转

    2. **焦点改变监听器**:`FocusChangeListener`用于监听`EditText`焦点的变化。我们可以重写`onFocusChange(View v, boolean hasFocus)`方法,在其中判断当前`EditText`是否获得焦点,如果失去焦点,执行相应的跳转...

    安卓EditText输入框相关-输入框一键删除内容。两种方法实现.rar

    在Android中,我们可以为EditText的父布局或者一个单独的清除按钮设置监听器。当点击这个按钮时,调用EditText的setText()方法,将其内容清空。以下是一个简单的示例: ```java // 获取EditText EditText editText ...

    ListView每个Item添加EditText,输入数据不窜行

    在用户开始编辑时,保存当前EditText的数据,例如在`beforeTextChanged()`、`onTextChanged()`或`afterTextChanged()`监听器中。 6. **监听ListView滚动**:添加OnScrollListener监听ListView的滚动事件。当...

    edittext固定长度,固定输入内容

    // 添加文本变化监听器 addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void ...

    带删除按钮的edittext

    项目的实现细节可能会包括如何在`EditText` 的监听器中处理点击事件,以及如何动态地显示或隐藏删除按钮,这取决于用户是否已有输入。此外,为了提供更好的用户体验,开发者可能还会考虑动画效果,例如点击删除按钮...

    EditText1.0

    - `setOnFocusChangeListener`:当`EditText`获取或失去焦点时触发的监听器。 - `setOnClickListener` 和 `setOnLongClickListener`:点击和长按事件处理。 4. 高级功能: - 密码框:通过`android:inputType=...

    android listview带有editText

    解决这个问题的一个常见方法是使用ListView的`setOnItemSelectedListener`或`setOnFocusChangeListener`监听器,以及EditText的`clearFocus()`方法,确保在焦点转移时正确处理视图状态。同时,可能还需要重写...

    EditTextDemo

    此外,我们还可以监听EditText的文本变化,通过添加TextWatcher监听器实现: ```java editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start...

    EditText实现搜索功能

    2. 实现TextWatcher监听器,重写三个方法,监听用户输入的变化。在afterTextChanged方法中,获取用户输入的字符串并执行搜索操作。 3. 搜索操作可以是遍历数据源,根据输入的关键词过滤匹配项。这里的数据源可能来自...

    Edittext限制字符数,可以限制最大和最小。

    然后,在你的`EditText`中应用这个过滤器: ```xml &lt;EditText android:id="@+id/et_input" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text" android:...

    完美解决recyclerview item上面包含多个edittext导致数据错乱,和滑动卡顿问题

    - 对EditText的文本改变监听器做优化,比如使用`postDelay()`延迟执行,或者在滚动时暂停监听。 3. EditText的焦点管理: - 可以使用`FocusChangeListener`监听EditText的焦点变化,当一个EditText失去焦点时,...

    Android中ListView每个条目中有EditText,右下角监听现实剩余输入数字

    在创建EditText时,我们可以为其设置一个TextWatcher监听器,监听文本的变化。TextWatcher提供了三个方法:beforeTextChanged(), onTextChanged() 和 afterTextChanged()。在这里,我们主要关心afterTextChanged(),...

Global site tag (gtag.js) - Google Analytics