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

时间:2016-04-07 00:05:05

标签: c# android xamarin android-edittext xamarin.android

在一个Xamarin.Android应用程序中,按照https://developer.xamarin.com/videos/?v=Activities_and_Intents(19:55)的示例,我试图为一个按钮的onclick事件分配一个事件处理程序,并且对上面的视频很满意,我&#39 ; d喜欢不调用委托或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!
    }
}

4 个答案:

答案 0 :(得分:4)

我的代码没有问题。

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

嗯,经验教训,希望这有助于其他人...

答案 1 :(得分:1)

这是一个简单的方法,首先在您的MainActivity中实现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);

答案 2 :(得分:0)

问题是你在android应用程序中使用Console,只需查看下面的代码并调整你的代码,并确保删除Console语句(使用其他东西,如Toast)。

    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! :)
    }

答案 3 :(得分:-1)

使用Xamarin版本更简单。

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

希望对你有用:)