我有一个主要基于片段的应用。每个片段都涉及它自己的json解析和json的图像加载。另外需要注意的是,当它被替换时,我在ech片段上调用了addToBackStack(null)。 当我在片段之间切换,并按下后退按钮时,需要相当长的时间4-5秒才能准确加载前一个片段。有没有什么方法可以最小化加载时间?
我已经使用异步任务来获取数据,异步任务在片段的onAttach()方法中执行,以防止在按下后退按钮时进行json解析。
答案 0 :(得分:0)
这可能很容易成为模拟器问题,但如果不是,可能是因为您正在加载主线程上的所有信息而不是异步任务。制作异步任务会在后台加载信息并在完成后更新UI
答案 1 :(得分:0)
public void currentFragment(int position, Bundle bundle) {
switch (position) {
case 105:
MainFragment workoutFragment = MainFragment.newInstance("", "");
workoutFragment.setArguments(bundle);
replaceFragment(workoutFragment, "front");
break;
case 108:
break;
default:
replaceFragment(new MainFragment(), "Main");
break;
}
}
private void replaceFragment(Fragment fragment, String tag) {
String backStateName = fragment.getClass().getName();
try {
boolean fragmentPopped = fm.popBackStackImmediate(backStateName, 0);
if (!fragmentPopped && fm.findFragmentByTag(backStateName) == null) {
//fragment not in back stack, create it.
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.fragment_container, fragment, backStateName);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(backStateName);
ft.commitAllowingStateLoss();
//ft.commit();
}
} catch (Exception e) {
e.printStackTrace();
}
}
// inside Backpress @Override
// public void onBackPressed()
// if (fm.getBackStackEntryCount() == 1) {
// super.onBackPressed();
// }
// to add fragment call like this
// currentFragment(101,null);
// what it do is popup from stack not add again and again that is best method to achiveve this if still getting problem then ask me again
答案 2 :(得分:0)
每个片段中的如果您不需要在背板上重新加载碎片图像,那么您可以使用它 特技
View mView; // declare it globally
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if(mView == null){ // it will not reload image it will set first time view which is loaded.
mView = inflater.inflate(R.layout.fragment_dashboard, null);
}
return rootView;
}
这将立即加载。它将恢复以前的视图 backpress
答案 3 :(得分:0)
一个原因可能是您正在加载的数据量。要克服这种情况,您可以Handler
使用Runnable
。
// Declaration
private Handler layoutHandler = new Handler();
private Runnable mRunnable;
// Initialization
mRunnable = new Runnable() {
@Override
public void run() {
hideProgress();
// Perform an action such as binding your data
}
};
现在在加载数据之前做出延迟......使用
showProgress();
layoutHandler.postDelayed(mRunnable, 800);
我建议您使用savedInstanceState
保存数据,而不是每次都加载数据。