diff --git a/apps/app/ui-tests-app/issues/issue-2942.ts b/apps/app/ui-tests-app/issues/issue-2942.ts
new file mode 100644
index 000000000..e4394d4bd
--- /dev/null
+++ b/apps/app/ui-tests-app/issues/issue-2942.ts
@@ -0,0 +1,11 @@
+export function onButtonLoaded(args){
+ if (args.object.android){
+ args.object.android.setFocusableInTouchMode(true);
+ args.object.android.setFocusable(true);
+ args.object.android.setClickable(true);
+ }
+}
+
+export function onListViewLoaded(args){
+ args.object.items = [1];
+}
\ No newline at end of file
diff --git a/apps/app/ui-tests-app/issues/issue-2942.xml b/apps/app/ui-tests-app/issues/issue-2942.xml
new file mode 100644
index 000000000..e5d1f256e
--- /dev/null
+++ b/apps/app/ui-tests-app/issues/issue-2942.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/app/ui-tests-app/issues/main-page.ts b/apps/app/ui-tests-app/issues/main-page.ts
index 78c40b104..72dfaa9d6 100644
--- a/apps/app/ui-tests-app/issues/main-page.ts
+++ b/apps/app/ui-tests-app/issues/main-page.ts
@@ -13,6 +13,7 @@ export function pageLoaded(args: EventData) {
examples.set("2911", "issues/issue-2911");
examples.set("2674", "issues/issue-2674");
+ examples.set("2942", "issues/issue-2942");
let viewModel = new SubMianPageViewModel(wrapLayout, examples);
page.bindingContext = viewModel;
diff --git a/tests/app/ui/helper.ts b/tests/app/ui/helper.ts
index c2bdfdcf0..d434ffabd 100644
--- a/tests/app/ui/helper.ts
+++ b/tests/app/ui/helper.ts
@@ -93,6 +93,9 @@ export function buildUIWithWeakRefAndInteract(createFunc: (
}
sp.removeChild(weakRef.get());
+
+ TKUnit.wait(1); // Wait for the TextField/TextView to close its keyboard so it can be released.
+
if (newPage.ios) {
/* tslint:disable:no-unused-expression */
// Could cause GC on the next call.
diff --git a/tns-core-modules/ui/editable-text-base/editable-text-base.android.ts b/tns-core-modules/ui/editable-text-base/editable-text-base.android.ts
index e57c12fd3..9dcfc63a1 100644
--- a/tns-core-modules/ui/editable-text-base/editable-text-base.android.ts
+++ b/tns-core-modules/ui/editable-text-base/editable-text-base.android.ts
@@ -4,6 +4,9 @@ import enums = require("ui/enums");
import utils = require("utils/utils");
import types = require("utils/types");
+//https://github.com/NativeScript/NativeScript/issues/2942
+let dismissKeyboardTimeoutId: number;
+
export class EditableTextBase extends common.EditableTextBase {
private _android: android.widget.EditText;
private _textWatcher: android.text.TextWatcher;
@@ -69,13 +72,26 @@ export class EditableTextBase extends common.EditableTextBase {
return;
}
- if (!hasFocus) {
+ if (hasFocus) {
+ if (dismissKeyboardTimeoutId){
+ // https://github.com/NativeScript/NativeScript/issues/2942
+ // Don't hide the keyboard since another (or the same) EditText has gained focus.
+ clearTimeout(dismissKeyboardTimeoutId);
+ dismissKeyboardTimeoutId = undefined;
+ }
+ }
+ else {
if (owner._dirtyTextAccumulator) {
owner._onPropertyChangedFromNative(EditableTextBase.textProperty, owner._dirtyTextAccumulator);
owner._dirtyTextAccumulator = undefined;
}
- owner.dismissSoftInput();
+ dismissKeyboardTimeoutId = setTimeout(() => {
+ // https://github.com/NativeScript/NativeScript/issues/2942
+ // Dismiss the keyboard if focus goes to something different from EditText.
+ owner.dismissSoftInput();
+ dismissKeyboardTimeoutId = null;
+ }, 1);
}
}
});
diff --git a/tns-core-modules/ui/list-view/list-view.android.ts b/tns-core-modules/ui/list-view/list-view.android.ts
index cb199765d..edd90c61c 100644
--- a/tns-core-modules/ui/list-view/list-view.android.ts
+++ b/tns-core-modules/ui/list-view/list-view.android.ts
@@ -47,6 +47,7 @@ export class ListView extends common.ListView {
public _createUI() {
this._android = new android.widget.ListView(this._context);
+ this._android.setDescendantFocusability(android.view.ViewGroup.FOCUS_AFTER_DESCENDANTS);
// Fixes issue with black random black items when scrolling
this._android.setCacheColorHint(android.graphics.Color.TRANSPARENT);
@@ -178,7 +179,7 @@ function ensureListViewAdapterClass() {
}
public getCount() {
- return this._listView && this._listView.items ? this._listView.items.length : 0;
+ return this._listView && this._listView.items && this._listView.items.length ? this._listView.items.length : 0;
}
public getItem(i: number) {