通过点击选项卡式页面顶部栏,Xamarin 表单滚动到选项卡式页面内的 listView 顶部
Xamarin forms scroll to top of listView which is inside a tabbed page by tapping Tabbed Page Top Bar
现状
我制作了一个 xamarin forms cross-platform 应用程序,它有一个带有无限滚动列表视图的选项卡式页面。
每当最后一项出现时,listView 就会以 10 项为增量进行填充。
正常行为
通常当我们第一次点击标签页的顶部栏(包含标签页标题的栏)时(如果我们当时没有查看标签),应用程序会切换到查看该页面.哪个好。
当我们第二次点击顶部栏时(当点击当前查看标签页的顶部栏时),没有任何反应(不像 twitter,你可以点击滚动到顶部)
我的问题
我希望能够在点击顶部栏时使 listView 滚动回顶部(列表中的第一个项目)(类似于 Twitter 在其 android 应用程序中的做法)同时仍然在我的 listView 中维护所有已加载的项目。
知道如何使顶部栏对点击做出反应以将 listView 滚动回顶部吗?
你应该尝试像这样向上滚动
ListViewName.ScrollTo(yourobject,ScrollToPosition.Start, true);
// true means boolean for animated.
希望对你有所帮助
TabbedPage 公开了一个 CurrentPageChanged 事件(或者您可以覆盖 OnCurrentPageChanged),该事件仅在所选选项卡更改时触发,因此如果您希望在用户更改选项卡时滚动,则需要订阅该事件。好像没这个必要,不过以防万一...
Xamarin.Forms 没有在第二次选择已选择的选项卡时触发的内置事件。不过,您可以通过对 Xamarin 的 TabbedPage 渲染器进行子类化来使用自定义渲染器实现这一点。我写了 here and have a working Xamarin.Forms solution for iOS, Android, and UWP here.
你没有提到平台,所以假设你想要 iOS 和 Android,核心位在下面。
iOS 自定义渲染器
public class MainTabPageRenderer : TabbedRenderer
{
private UIKit.UITabBarItem _prevItem;
public override void ViewDidAppear(bool animated)
{
base.ViewDidAppear(animated);
if (SelectedIndex < TabBar.Items.Length)
_prevItem = TabBar.Items[SelectedIndex];
}
public override void ItemSelected(UIKit.UITabBar tabbar,
UIKit.UITabBarItem item)
{
if (_prevItem == item && Element is MainPage)
{
// the same tab was selected a second time, so do something
}
_prevItem = item;
}
}
Android 自定义渲染器
public class MainTabPageRenderer : TabbedPageRenderer, TabLayout.IOnTabSelectedListener
{
void TabLayout.IOnTabSelectedListener.OnTabReselected(TabLayout.Tab tab)
{
if (Element is MainPage)
{
// the same tab was selected a second time, so do something
}
}
}
捕获该事件后,使用 ListView.ScrollTo 方法滚动到顶部。
现状
我制作了一个 xamarin forms cross-platform 应用程序,它有一个带有无限滚动列表视图的选项卡式页面。 每当最后一项出现时,listView 就会以 10 项为增量进行填充。
正常行为
通常当我们第一次点击标签页的顶部栏(包含标签页标题的栏)时(如果我们当时没有查看标签),应用程序会切换到查看该页面.哪个好。
当我们第二次点击顶部栏时(当点击当前查看标签页的顶部栏时),没有任何反应(不像 twitter,你可以点击滚动到顶部)
我的问题
我希望能够在点击顶部栏时使 listView 滚动回顶部(列表中的第一个项目)(类似于 Twitter 在其 android 应用程序中的做法)同时仍然在我的 listView 中维护所有已加载的项目。
知道如何使顶部栏对点击做出反应以将 listView 滚动回顶部吗?
你应该尝试像这样向上滚动
ListViewName.ScrollTo(yourobject,ScrollToPosition.Start, true);
// true means boolean for animated.
希望对你有所帮助
TabbedPage 公开了一个 CurrentPageChanged 事件(或者您可以覆盖 OnCurrentPageChanged),该事件仅在所选选项卡更改时触发,因此如果您希望在用户更改选项卡时滚动,则需要订阅该事件。好像没这个必要,不过以防万一...
Xamarin.Forms 没有在第二次选择已选择的选项卡时触发的内置事件。不过,您可以通过对 Xamarin 的 TabbedPage 渲染器进行子类化来使用自定义渲染器实现这一点。我写了 here and have a working Xamarin.Forms solution for iOS, Android, and UWP here.
你没有提到平台,所以假设你想要 iOS 和 Android,核心位在下面。
iOS 自定义渲染器
public class MainTabPageRenderer : TabbedRenderer
{
private UIKit.UITabBarItem _prevItem;
public override void ViewDidAppear(bool animated)
{
base.ViewDidAppear(animated);
if (SelectedIndex < TabBar.Items.Length)
_prevItem = TabBar.Items[SelectedIndex];
}
public override void ItemSelected(UIKit.UITabBar tabbar,
UIKit.UITabBarItem item)
{
if (_prevItem == item && Element is MainPage)
{
// the same tab was selected a second time, so do something
}
_prevItem = item;
}
}
Android 自定义渲染器
public class MainTabPageRenderer : TabbedPageRenderer, TabLayout.IOnTabSelectedListener
{
void TabLayout.IOnTabSelectedListener.OnTabReselected(TabLayout.Tab tab)
{
if (Element is MainPage)
{
// the same tab was selected a second time, so do something
}
}
}
捕获该事件后,使用 ListView.ScrollTo 方法滚动到顶部。