如何使用 Xamarin Android 在 Edit Text 上实现 TextWatcher 接口?

Posted

技术标签:

【中文标题】如何使用 Xamarin Android 在 Edit Text 上实现 TextWatcher 接口?【英文标题】:How to implement TextWatcher interface on Edit Text with Xamarin Android? 【发布时间】:2022-01-10 10:22:18 【问题描述】:

我正在尝试实现一个接口,当用户在其上键入单个字符时,该接口将在我的EditText 上进行侦听,这样当发生这种情况时,我将收到一条 Toast 消息,You tried to type a new character 并且当用户清除时,此接口将检查EditText 中的字符长度,并显示一个 Toast 消息,如果 count 为 0,则清除所有文本。这就是 android.Text.IWatcher 接口的用武之地。我已经在我的主类中实现了它,如下所示...

public class MainActivity : AppCompatActivity,ITextWatcher
    
      //after I implemented the interface then these methods were generated by the compiler
       public void OnTextChanged(Java.Lang.ICharSequence s, int start, int before, int count)
        
           //check the length of characters typed and show a Toast
            if (s.Length() > 0)
            
                
                Toast.MakeText(this, "You are typing more text", ToastLength.Long).Show();
            
     //if user clears all text also show a Toast
            if (s.Length() == 0)
            
               
                Toast.MakeText(this, "You have cleared all the text", ToastLength.Long).Show();
            
        
    

我将接口分配给我的EditText,如下所示。

               EditText user_message = chat_view.FindViewById<EditText>(Resource.Id.message_box);
                //assign a text watcher to the EditText
               user_message.AddTextChangedListener(this);

问题是当我在我的 Android 设备上调试这个应用程序时输入我的 EditText 时没有得到 Toasts,请帮我解决这个问题,谢谢。

【问题讨论】:

【参考方案1】:

为什么不直接使用EditText 上公开的 C# 事件呢?

user_message.TextChanged += OnTextChanged;

然后实现方法:

private void OnTextChanged(object sender, TextChangedEventArgs e)

    if (e.Text.Count() > 0)
    
        // do stuff
    

【讨论】:

我会按照你的建议尝试实施,看看我是否会得到一些结果并将其标记为已接受,@Cheesebaron 视图被夸大了,正在使用当前的活动类来调用 Toast,这可能是原因吗? 使用您的调试器并缩小正在发生的事情。我无法重现您的问题... 好的,我必须启动一个新的 Activity Intent 来处理编辑文本事件,谢谢您的帮助【参考方案2】:

创建一个 TextWatcher 类,然后将此侦听器添加到 EditText。

 public class TextWatcher : Java.Lang.Object, ITextWatcher

    public void AfterTextChanged(IEditable s)
    

    

    public void BeforeTextChanged(ICharSequence s, int start, int count, int after)
    

    

    public void OnTextChanged(ICharSequence s, int start, int before, int count)
    
        Console.WriteLine("---------------------------" + s);
    

用法:

SetContentView(Resource.Layout.layout4);
        var editText = FindViewById<EditText>(Resource.Id.editText1);
        editText.AddTextChangedListener(new TextWatcher());

【讨论】:

已经找到解决方法,但感谢您的回答 很高兴为您提供帮助。希望这种方式对您的问题有所帮助。

以上是关于如何使用 Xamarin Android 在 Edit Text 上实现 TextWatcher 接口?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Xamarin 在 Android 中同步获取 GPS 位置更新?

如何在 Xamarin 中使用 SetAction

如何在 Xamarin(iOS 和 Android)应用程序中使用 Windows 命名空间?

如何在 Xamarin Android 中使用 FontAwesome 图标

如何使用Xamarin在Visual Studio中创建Android应用

如何在 Xamarin/Android 上启用多个 BLE 特征通知?