延迟切换标签android tablayout

问题描述 投票:-2回答:2

我在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;
}
android android-tablayout
2个回答
1
投票

移动数据加载到后台工作程序,不要在UI线程上加载信息。这样,在Tab切换之间抓取内容时不会延迟。我有同样的问题,不得不将我的所有数据加载到单独的线程,以启用干净平滑的UI。加载后,请确保已设置缓存页面数量的屏幕限制,以保持重要的一点,以避免在每次滑动时重新加载。

更多信息here


0
投票

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

new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    getActivity().runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            setScrollView(candidateData);
                        }
                    });
                }
            }, 100);
© www.soinside.com 2019 - 2024. All rights reserved.