summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.Android/ViewRenderer.cs
diff options
context:
space:
mode:
authorJason Smith <jason.smith@xamarin.com>2016-03-26 23:29:45 -0700
committerRui Marinho <me@ruimarinho.net>2016-03-29 18:15:11 +0100
commit11dc5a5aca2842346759022fc405e89d1d0132b1 (patch)
treec587604fc9805b677e94c749788d011a36ce0a41 /Xamarin.Forms.Platform.Android/ViewRenderer.cs
parent0e03738adefaa1accd733e817d7730f2c9b82534 (diff)
downloadxamarin-forms-11dc5a5aca2842346759022fc405e89d1d0132b1.tar.gz
xamarin-forms-11dc5a5aca2842346759022fc405e89d1d0132b1.tar.bz2
xamarin-forms-11dc5a5aca2842346759022fc405e89d1d0132b1.zip
[A]Resolve issue where calling Focus in an unfocus event would fail
Fixes https://bugzilla.xamarin.com/show_bug.cgi?id=39702 without API change. This does cause android to always indicate a focus event was succesful now because we have no way of knowing ahead of time if it will succeed or fail. That said we always already indicated that unfocus was successful because android has no way of reporting such a failure.
Diffstat (limited to 'Xamarin.Forms.Platform.Android/ViewRenderer.cs')
-rw-r--r--Xamarin.Forms.Platform.Android/ViewRenderer.cs14
1 files changed, 12 insertions, 2 deletions
diff --git a/Xamarin.Forms.Platform.Android/ViewRenderer.cs b/Xamarin.Forms.Platform.Android/ViewRenderer.cs
index f5c094ba..0415ce93 100644
--- a/Xamarin.Forms.Platform.Android/ViewRenderer.cs
+++ b/Xamarin.Forms.Platform.Android/ViewRenderer.cs
@@ -1,6 +1,7 @@
using System;
using System.ComponentModel;
using Android.App;
+using Android.OS;
using Android.Views;
using AView = Android.Views.View;
@@ -149,11 +150,20 @@ namespace Xamarin.Forms.Platform.Android
if (Control == null)
return;
+ e.Result = true;
+
if (e.Focus)
- e.Result = Control.RequestFocus();
+ {
+ // use post being BeginInvokeOnMainThread will not delay on android
+ Looper looper = Context.MainLooper;
+ var handler = new Handler(looper);
+ handler.Post(() =>
+ {
+ Control?.RequestFocus();
+ });
+ }
else
{
- e.Result = true;
Control.ClearFocus();
}