Skip to content

Instantly share code, notes, and snippets.

@fbencosme
Created April 24, 2017 19:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fbencosme/515da117768db32269b2f161fb912849 to your computer and use it in GitHub Desktop.
Save fbencosme/515da117768db32269b2f161fb912849 to your computer and use it in GitHub Desktop.
public static class UiExtensions
{
public static IObservable<Keycode> RxKeyPressed(this EditText tv, bool ignoreBackKey = false) =>
Observable.Create((IObserver<Keycode> obs) => {
tv.SetOnKeyListener(new KeyUpPressedListener(obs, ignoreBackKey));
return () => tv.SetOnKeyListener(null);
});
public static IObservable<string> RxTextChanged (this TextView tv, int dueTimeMilliseconds = 500) =>
FromEventPattern<TextChangedEventArgs> (
ev => tv.TextChanged += ev,
ev => tv.TextChanged -= ev
).Select(_ => _.EventArgs.Text.ToString())
.Restrict(dueTimeMilliseconds);
public static IObservable<Unit> RxClick(this View v) =>
FromEventPattern(
ev => v.Click += ev,
ev => v.Click -= ev
).Select(_ => Unit.Default);
public static IObservable<int> RxSelectedItem(this Spinner s) =>
FromEventPattern<AdapterView.ItemSelectedEventArgs>(
ev => s.ItemSelected += ev,
ev => s.ItemSelected -= ev
).Select(_=> (_.Sender as Spinner).SelectedItemPosition);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment