NavigationDrawer:ListView和SwipeRefreshLayout的行为,动画卡住

时间:2016-04-04 08:44:31

标签: android listview xamarin navigation-drawer mvvmcross

我有一个包含SwipeRefreshLayout和ListView的NavigationDrawer。有两个问题:第一个是,当你拉动刷新并将NavigationDrawer向左移动一个像素时,SwipeRefreshLayout的动画将停止 - 应用程序似乎挂起(尽管一切正常)。 第二个问题是NavigationDrawer感觉非常“浮动”,当滚动ListView时,你有时会移动抽屉,抽屉中的滚动被阻止。

这是布局(使用xamarin.android和mvvmcross):

<MvvmCross.Droid.Support.V4.MvxSwipeRefreshLayout
    android:id="@+id/categoriesRefresher"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    local:layout_behavior="@string/appbar_scrolling_view_behavior"
    local:MvxBind="Refreshing CategoriesLoading; RefreshCommand ReloadCommand">
    <Mvx.MvxListView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/menuListView"
        android:choiceMode="singleChoice"
        android:divider="@drawable/seperator_line_listview"
        android:dividerHeight="1dp"
        local:MvxBind="ItemsSource Categories; ItemClick CategorySelectedCommand"
        local:MvxItemTemplate="@layout/cells_category_item" />
</MvvmCross.Droid.Support.V4.MvxSwipeRefreshLayout>

当ListView滚动时,我试图阻止NavigationDrawer响应手势:

listView.Scroll += ListViewOnScroll;
listView.ScrollStateChanged += ListViewOnScrollStateChanged;

private void ListViewOnScrollStateChanged(object sender, AbsListView.ScrollStateChangedEventArgs scrollStateChangedEventArgs)
    {
        if(scrollStateChangedEventArgs.ScrollState == ScrollState.Idle)
            this.parentActivity.DrawerLayout?.SetDrawerLockMode(DrawerLayout.LockModeUnlocked);
    }

 private void ListViewOnScroll(object sender, AbsListView.ScrollEventArgs scrollEventArgs)
    {
        this.parentActivity.DrawerLayout?.SetDrawerLockMode(DrawerLayout.LockModeLockedOpen);
    }

但这至少有两个副作用:在低端设备上运行并在选择项目后自动关闭NavigationDrawer会停止工作,即使重置LockMode:

DrawerLayout?.SetDrawerLockMode(DrawerLayout.LockModeUnlocked);
DrawerLayout?.CloseDrawers();

它也无法修复卡住的SwipeRefreshLayout动画,至少在滚动时无法移动抽屉。

有没有更好的方法来处理这个问题并修复其他问题?

0 个答案:

没有答案