diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue15305.xaml b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue15305.xaml new file mode 100644 index 00000000000..048e31f2763 --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue15305.xaml @@ -0,0 +1,23 @@ + + + + + \ No newline at end of file diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue15305.xaml.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue15305.xaml.cs new file mode 100644 index 00000000000..8c3f1367d8a --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue15305.xaml.cs @@ -0,0 +1,47 @@ +using System.Collections.ObjectModel; +using Xamarin.Forms.CustomAttributes; +using Xamarin.Forms.Internals; +using Xamarin.Forms.Xaml; + +#if UITEST +using Xamarin.Forms.Core.UITests; +using Xamarin.UITest; +using NUnit.Framework; +#endif + +namespace Xamarin.Forms.Controls.Issues +{ +#if UITEST + [Category(UITestCategories.ManualReview)] +#endif +#if APP + [XamlCompilation(XamlCompilationOptions.Compile)] +#endif + [Preserve(AllMembers = true)] + [Issue(IssueTracker.Github, 15305, "[Android] TalkBack always considers ListView's header and footer for indexing/counting", PlatformAffected.Android)] + public partial class Issue15305 : TestContentPage + { + public Issue15305() + { +#if APP + InitializeComponent(); +#endif + } + + protected override void Init() + { + BindingContext = new ViewModelIssue15305(); + } + } + + [Preserve(AllMembers = true)] + public class ViewModelIssue15305 + { + public ViewModelIssue15305() + { + Items = new ObservableCollection() { "first item", "second item", }; + } + + public ObservableCollection Items { get; } + } +} \ No newline at end of file diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems index 7e7af9cb4de..1135b9fd051 100644 --- a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems @@ -1864,6 +1864,9 @@ + + Issue15305.xaml + MyCollectionView.xaml Code @@ -2417,6 +2420,9 @@ MSBuild:UpdateDesignTimeXaml + + MSBuild:UpdateDesignTimeXaml + Designer MSBuild:UpdateDesignTimeXaml diff --git a/Xamarin.Forms.Platform.Android/CellAdapter.cs b/Xamarin.Forms.Platform.Android/CellAdapter.cs index 1355f758de1..a8801256ee3 100644 --- a/Xamarin.Forms.Platform.Android/CellAdapter.cs +++ b/Xamarin.Forms.Platform.Android/CellAdapter.cs @@ -132,13 +132,12 @@ bool AActionMode.ICallback.OnPrepareActionMode(AActionMode mode, IMenu menu) public void OnItemClick(AdapterView parent, AView view, int position, long id) { + var listView = parent as AListView; + if (listView != null) + position -= listView.HeaderViewsCount; + if (_actionMode != null || _supportActionMode != null) - { - var listView = parent as AListView; - if (listView != null) - position -= listView.HeaderViewsCount; HandleContextMode(view, position); - } else HandleItemClick(parent, view, position, id); } diff --git a/Xamarin.Forms.Platform.Android/Renderers/ListViewAdapter.cs b/Xamarin.Forms.Platform.Android/Renderers/ListViewAdapter.cs index 26c2cc2ef73..2173ce4dc74 100644 --- a/Xamarin.Forms.Platform.Android/Renderers/ListViewAdapter.cs +++ b/Xamarin.Forms.Platform.Android/Renderers/ListViewAdapter.cs @@ -481,9 +481,6 @@ protected override void HandleItemClick(AdapterView parent, AView view, int posi cell = (Cell)(cellOwner as INativeElementView)?.Element; } - // All our ListView's have called AddHeaderView. This effectively becomes index 0, so our index 0 is index 1 to the listView. - position--; - if (position < 0 || position >= Count) return; diff --git a/Xamarin.Forms.Platform.Android/Renderers/ListViewRenderer.cs b/Xamarin.Forms.Platform.Android/Renderers/ListViewRenderer.cs index 2bad29eb08e..6992abadd5b 100644 --- a/Xamarin.Forms.Platform.Android/Renderers/ListViewRenderer.cs +++ b/Xamarin.Forms.Platform.Android/Renderers/ListViewRenderer.cs @@ -365,7 +365,14 @@ void UpdateFooter() } if (footer == null) + { + if (_footerView.ChildCount == 0) + { + AListView nativeListView = Control; + nativeListView.RemoveFooterView(_adapter.FooterView); + } return; + } if (_footerRenderer != null) _footerRenderer.SetElement(footer); @@ -397,7 +404,14 @@ void UpdateHeader() } if (header == null) + { + if (_headerView.ChildCount == 0) + { + AListView nativeListView = Control; + nativeListView.RemoveHeaderView(_adapter.HeaderView); + } return; + } if (_headerRenderer != null) _headerRenderer.SetElement(header);