Xamarin的形式通过点击标签页顶栏滚动的ListView这是一个标签页内的顶部
现状Xamarin的形式通过点击标签页顶栏滚动的ListView这是一个标签页内的顶部
我已经做了xamarin形式的跨平台应用程序,它有一个标签页与无限滚动的ListView 。 每当最后一个项目出现时,listView都会以10个项目的增量填充。
的正常行为
通常,当我们轻点选项卡页面的最上面一栏的第一次(如果我们没有在那一刻查看选项卡)(包含标签页的标题栏),该应用程序将切换到查看该页面。这很好。
当我们点击第二次顶栏(攻的当前浏览标签页面的最上面一栏时),没有任何反应(不像Twitter的,U可以点击滚动到顶部)
我的问题
我希望能够让listView在顶部栏被点击时(例如twitter在其android应用程序中的做法)滚动回顶部(到列表中的第一个项目),同时仍然保持所有已经加载了我的listView中的项目。
关于如何使顶部栏响应水龙头滚动listView返回顶部的任何想法?
的TabbedPage暴露了CurrentPageChanged事件(或者你可以重写OnCurrentPageChanged)将触发只有当所选标签的变化,所以如果你想在用户改变标签页时滚动,你需要订阅。似乎并不需要这样做,但以防万一...
Xamarin.Forms没有内置事件,当第二次选择已经选择的选项卡时触发。不过,通过继承Xamarin的TabbedPage渲染器,您可以使用自定义渲染器来实现这一点。我写了它here,并有一个适用于iOS,Android和UWP here的Xamarin.Forms解决方案。
你没有提及平台,所以假设你想要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方法来滚动到顶部。
你应该尝试这样滚动起来
ListViewName.ScrollTo(yourobject,ScrollToPosition.Start, true);
// true means boolean for animated.
我希望这可以帮助您
谢谢,这有些帮助,我主要关心的是如何让顶栏执行该代码时,单击它。我不知道哪个事件或哪里实现你的代码行,(我对Xamarin Forms还是很新的)。试图搜索整个互联网,但没有运气与这种特殊情况。 –
如果您使用的是代码,您需要将该代码片段插入到您的事件处理程序中。如果你使用MVVM,我会建议使用命令来绑定它。您可以创建工具栏按钮,以便当用户单击“向上滚动”按钮时,该列表视图滚动位置将被触发。我希望它能帮助你 –