在一个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!
}
}
答案 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;
};
希望对你有用:)