Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么TextChanged事件在这个Xamarin.Android代码中不起作用?_C#_Android_Xamarin_Android Edittext_Xamarin.android - Fatal编程技术网

C# 为什么TextChanged事件在这个Xamarin.Android代码中不起作用?

C# 为什么TextChanged事件在这个Xamarin.Android代码中不起作用?,c#,android,xamarin,android-edittext,xamarin.android,C#,Android,Xamarin,Android Edittext,Xamarin.android,在Xamarin.Android应用程序中,按照(19:55)的示例,我尝试将事件处理程序分配给按钮的onclick事件,并微笑地分配给上面的视频,我不想调用委托或lambda,而只是调用在别处定义的方法。这在我的代码中不起作用,但如果我使用委托,它会起作用。。。你能解释一下原因吗 另外,我正在尝试对EditText执行相同的操作,我想为其添加文本更改时的事件。但这也不起作用 public class MainActivity : Activity { protected overri

在Xamarin.Android应用程序中,按照(19:55)的示例,我尝试将事件处理程序分配给按钮的onclick事件,并微笑地分配给上面的视频,我不想调用委托或lambda,而只是调用在别处定义的方法。这在我的代码中不起作用,但如果我使用委托,它会起作用。。。你能解释一下原因吗

另外,我正在尝试对EditText执行相同的操作,我想为其添加文本更改时的事件。但这也不起作用

public class MainActivity : Activity

{
    protected override void OnCreate(Bundle bundle)
    {   
        base.OnCreate(bundle);

        Button button = FindViewById<Button>(Resource.Id.MyButton);
        button.Click += delegate { button.Text = "clicked!" };
        // this works

        Button searchButton = FindViewById<Button>(Resource.Id.searchButton);
        searchButton.Click += SearchButton_Click;

        EditText artistNameEditText = FindViewById<EditText>(Resource.Id.artistNameEditText);
        artistNameEditText.TextChanged += artistNameEditText_TextChanged;
    }

    private void SearchButton_Click(object sender, EventArgs e)
    {
        Console.WriteLine("button pressed!");
        // this is not working!
    }

    private void artistNameEditText_TextChanged(object sender, TextChangedEventArgs e)
    {
        Console.WriteLine("text has changed!");
        // this is not working!
    }
}
公共类main活动:活动
{
创建时受保护的覆盖无效(捆绑包)
{   
base.OnCreate(bundle);
Button Button=FindViewById(Resource.Id.MyButton);
button.Click+=委托{button.Text=“clicked!”;
//这很有效
Button searchButton=FindViewById(Resource.Id.searchButton);
searchButton.Click+=searchButton\u Click;
EditText artistNameEditText=FindViewById(Resource.Id.artistNameEditText);
artistNameEditText.TextChanged+=artistNameEditText\u TextChanged;
}
私有无效搜索按钮\单击(对象发送者,事件参数e)
{
控制台。WriteLine(“按下按钮!”);
//这不管用!
}
私有void artistNameEditText\u TextChanged(对象发送者,TextChangedEventArgs e)
{
Console.WriteLine(“文本已更改!”);
//这不管用!
}
}

使用Xamarin版本要简单得多

textfield.TextChanged += (sender, e) =>
        {
            var abc = 123;
        };

希望对您有用:)

这是一个简单的方法,首先在您的主要活动中实现Android.Text.ITextWatcher,如下所示:

public class MainActivity : Activity, Android.Text.ITextWatcher
    {
        public void AfterTextChanged (Android.Text.IEditable s)
        {

        }

        public void BeforeTextChanged (Java.Lang.ICharSequence s, int start, int count, int after)
        {

        }

        public void OnTextChanged (Java.Lang.ICharSequence s, int start, int before, int count)
        {
            //were text is changed
        }
...
}
并使用以下命令将TextChangedListener写入元素

EditText artistNameEditText = FindViewById<EditText>(Resource.Id.artistNameEditText);
artistNameEditText.AddTextChangedListener (this);
EditText-artistNameEditText=FindViewById(Resource.Id.artistNameEditText);
artistNameEditText.AddTextChangedListener(此);

我的代码没有问题

它不起作用的原因是。。。在将新版本部署到设备之前,我没有从设备上卸载我的应用程序,因此我一次又一次地运行旧版本。我想当然地认为旧版本会被新版本取代,就像再次安装同一APK的新版本一样。这有点问题,因为我没有对UI进行任何更改,只是尝试使用事件处理程序


好的,吸取的教训,希望这能帮助其他人…

问题是,您正在android应用程序中使用控制台,只需查看下面的代码并调整代码,确保删除控制台语句(使用其他语句,如Toast)


尝试将该方法设置为受保护而不是私有。是否确实已附加事件处理程序?这是实际代码的缩写版本,可能会有不同的表现吗?您提供的代码片段看起来应该是很好的。@Keithre实际代码基本上是一样的。。。现在我扩展了我的问题,包括事件点击按钮的代码,相反,它工作正常。。。它能帮上忙吗?@Jason请再次检查我的扩展问题,按钮点击事件有效,而且它也是私有的..嗯,点击事件有效的事实让事情变得更奇怪。也可以共享布局xml吗?请不要告诉我这是必要的,或者是唯一的方法。。。为什么我的示例中的点击事件能正常工作?是的,这是在“live”中观看EditText更改操作的唯一方法当控件失去焦点时调用TextChanged如果你阅读Android文档,你会发现添加文本更改侦听器是跟踪所有EditText文本更改的方法()请检查我自己的答案,它不起作用的原因要简单得多。。。。。。让人难堪的简单我会说…:\但是,我不得不反驳你,你不需要你发布的所有代码,你只需要做
artistNameEditText.TextChanged+=artistNameEditText\u TextChanged而且它工作得很好…首先你需要知道在根目录中是如何工作的我不知道为什么当问题是你这边的错误时,你会将答案标记为无效,事实上,TextChanged绑定了一个在Xamarin端实现的内部ITextWatcher请在将答案标记为无效之前阅读文档即使你对TextChanged绑定了一个内部ITextWatcher是正确的,我还是否决了你的答案,因为我不得不按照你说的方式修改代码,这有点误导,正如你的回答所暗示的,我的代码是问题的根源。我还明确地问,你发布的内容是否是唯一的方法,你证实了这一点。想象一下,有人来到这里看到你的答案,他们的代码会变得更加复杂,而他们并不需要,他们也会被欺骗,认为他们的代码一定是错的。所以,对不起,不管是谁给出了否定的观点都是好的,至少要提到他们为什么这么做。这是一个有效的答案,给出了完全相同的结果。唯一的区别是它是一个匿名方法。根据Xamarin方法,这也是执行此操作的首选方法。语法方面,我问题中事件处理程序的代码非常好,因此您建议以另一种方式重写它有点误导。事实上,我最终浪费了更多的时间,只是试图以各种不同的方式重写事件处理程序,并专注于此。我不是说我不感谢你的努力,但这不是正确的答案,没有帮助我找到它,实际上也让我有点偏离了道路,所以。。。您还将代码标记为“Xamarin版本”,但它与Xamarin无关,这只是用C#编写代码的另一种方式。无论如何,谢谢你的帮助!jj_2;:我并没有完全编造“Xamarin版本”,我在学习的时候在几个地方清楚地看到了这一点。第二,我不知道你是否知道我建议的方法。我所做的只是帮你找到答案。如果你有建议,你需要与书面形式相同的方式。也许我不会有阿宝
    private void SearchButton_Click(object sender, EventArgs e)
    {
        Button btn = (Button)sender;
        btn.Text = "Search Button Clicked!";
        // Now it is working! :)
    }

    private void artistNameEditText_TextChanged(object sender, TextChangedEventArgs e)
    {
        Toast.MakeText(this, "Text has just changed!", ToastLength.Long).Show();
        // Now it is working! :)
    }