延迟切换选项卡 android tablayout

Delay in switching tabs android tablayout

我在 tablayout 中的选项卡之间切换时遇到性能问题。在第一种情况下,当我的记录较少时,我可以轻松地在选项卡之间切换,并且用户不会收取任何延迟费用。当我有更多数据时,用户会感到滞后,如下面的屏幕截图所示。虽然屏幕会在几秒钟后加载,但它对用户来说非常明显。有人可以建议我可以检查以进一步改进的领域。以下是问题和当前片段代码...

UI -

  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_profile, container, false);
    dbConnection = new databaseHelper(getContext());
    dbConnection.getWritableDatabase();
    profileFragment = view.findViewById(R.id.profileFragment);
    downloadData = profileFragment.findViewById(R.id.dwnldData);
    refresh = profileFragment.findViewById(R.id.refreshdata);
    search = profileFragment.findViewById(R.id.search);
    removeFilter= profileFragment.findViewById(R.id.removeFilter);
    viewPager = (ViewPager) getActivity().findViewById(R.id.viewpager);
    currmelas = dbConnection.findMelas("YES","YES","");

    downloadData.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            viewPager.setCurrentItem(0);
        }
    });



    if (viewPager.getCurrentItem()==1){
        candidateData = dbConnection.findHighCandData(mela_id,"1","");
    } else {
        candidateData = dbConnection.findHighCandData(mela_id,"","");
    }


    if (candidateData.size() <= 0) {
        if (currmelas.size() == 0 ){
            downloadData.setVisibility(View.VISIBLE);
            Handler handler = new Handler();
            handler.post(new Runnable() {
                @Override
                public void run() {
                    if(userSettings.size()==0){
                        viewPager.setCurrentItem(3);
                    } else {
                        viewPager.setCurrentItem(0);
                    }
                }
            });

        }
    } else {            

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        setScrollView(candidateData);
                    }
                });
            }
        }, 100);

    }
    return view;
}

将您的数据加载到后台工作程序,不要在 UI 线程上加载信息。这样,您在标签切换之间抓取内容时就不会延迟。我遇到了同样的问题,不得不将我所有的数据加载移动到单独的线程以实现干净流畅 UI。加载后,请确保您已设置屏幕外缓存页面的数量限制,以保留重要信息以避免每次滑动时重新加载。

更多信息here

只是想分享我的解决方案,以便对其他人有所帮助。在我的代码中,我在 Loop 中加载配置文件,所以每当我有大约 200 个配置文件时,它就会花费时间来加载并且用户可以看到滞后。正如@Sam 提到的,我在下面的处理程序中移动了代码,它解决了我的问题。现在系统立即显示选项卡,数据在几秒钟后加载,这比以前的延迟要好。

new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    getActivity().runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            setScrollView(candidateData);
                        }
                    });
                }
            }, 100);