延迟切换选项卡 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);
我在 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);