【问题标题】:TabLayout performance issueTabLayout 性能问题
【发布时间】:2020-06-06 16:16:01
【问题描述】:

我有一个链接到 tablayout 的 ViewPager。我使用 FragmentStatePagerAdapter 来填充我的适配器,并将它与 SetupWithViewPager 链接到 tabLayout。

如果我将 500 个片段添加到我的查看器,则需要大约 2 秒才能显示。

如果我删除TabLayout的链接并删除它,没有Lag,一切都直接显示。

是否有东西可以缓存未显示的项目tabLayout???

有人有想法吗?

编辑:

[MvxFragment(typeof(MainViewModel), Resource.Id.content_frame, true)]
[Register("mvvmcrosslearning.droid.fragments.DateFragment")]
public class DateFragment : BaseFragment<DateViewModel>
{
    protected override int FragmentId => Resource.Layout.fragment_date;

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        var view = base.OnCreateView(inflater, container, savedInstanceState);
        var viewPager = view.FindViewById<ViewPager>(Resource.Id.viewpager);
        var tabLayout = view.FindViewById<TabLayout>(Resource.Id.tabs);

        new Thread(() =>
        {
            if (viewPager == null) return;

            var fragments = new List<MvxCachingFragmentStatePagerAdapter.FragmentInfo>();
            for (var i = 0; i < 500; i++)
                fragments.Add(new MvxCachingFragmentStatePagerAdapter.FragmentInfo(
                    $"Ceci est du text : {i}",
                    typeof(RecyclerViewFragment),
                    typeof(RecyclerViewModel),
                    new Device() { Date = $"index from frag: {i}" }
                ));

            Activity.RunOnUiThread(() => viewPager.Adapter =
                new MvxCachingFragmentStatePagerAdapter(Activity, ChildFragmentManager, fragments));

            viewPager.OffscreenPageLimit = 1;

            tabLayout.SetupWithViewPager(viewPager);
        }).Start();

        return view;
    }
}

和视图

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
                                                 xmlns:local="http://schemas.android.com/apk/res-auto"
                                                 xmlns:app="http://schemas.android.com/apk/res-auto"
                                                 android:id="@+id/main_content"
                                                 android:layout_width="match_parent"
                                                 android:layout_height="match_parent">
    <android.support.design.widget.AppBarLayout android:layout_width="match_parent"
                                                android:layout_height="wrap_content"
                                                android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabMode="scrollable"
            />
    </android.support.design.widget.AppBarLayout>
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        local:layout_behavior="@string/appbar_scrolling_view_behavior" >
    </android.support.v4.view.ViewPager>
</android.support.design.widget.CoordinatorLayout>

片段中只有一个简单的按钮。

【问题讨论】:

  • 附上你的代码
  • 当你删除tabLayout.SetupWithViewPager(viewPager)时,滞后就消失了?
  • 是的,它消失了
  • 你能分享一个基本的演示来重现这个问题吗?
  • 你能解决这个问题吗?我也面临同样的问题。

标签: android xamarin


【解决方案1】:

这似乎是一个已知的错误,正在这里跟踪:https://issuetracker.google.com/issues/37053935

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 2022-01-04
    • 2015-11-24
    • 2020-03-17
    相关资源
    最近更新 更多