Android 如何使用fragment快速转换viewpager?
这里我有一个问题,比如如何使用fragment快速浏览寻呼机 解释我正在做的事情: 我有一个片段,其中包含五个web视图和一个列表视图,以显示相应的数据。根据内容计数,我将片段加载到viewpager中,并显示相应的数据。实现方面都很好,但查看寻呼机的性能非常慢 代码段: 寻呼机适配器加载:Android 如何使用fragment快速转换viewpager?,android,android-fragments,android-viewpager,fragmentpageradapter,android-pageradapter,Android,Android Fragments,Android Viewpager,Fragmentpageradapter,Android Pageradapter,这里我有一个问题,比如如何使用fragment快速浏览寻呼机 解释我正在做的事情: 我有一个片段,其中包含五个web视图和一个列表视图,以显示相应的数据。根据内容计数,我将片段加载到viewpager中,并显示相应的数据。实现方面都很好,但查看寻呼机的性能非常慢 代码段: 寻呼机适配器加载: FragmentPagerAdapter mFragmentPagerAdapter = new ViewPagerAdapter(getActivity(), getChildFragmentManage
FragmentPagerAdapter mFragmentPagerAdapter = new ViewPagerAdapter(getActivity(), getChildFragmentManager(), takeExamResponse.getPayloads().getQuestions(), mFragmentNavigator, takeExamResponse.getPayloads().getType(), "finished".equals(getArguments().getString("IS_FINISHED")) ? true : false, mQuestionsFragment);
viewPager.setAdapter(mFragmentPagerAdapter);
PagerAdapter:
import android.content.Context;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import com.comquest.fragment.ViewPagerFragment;
import com.comquest.interfaces.FragmentNavigator;
import com.comquest.response.Question;
import com.comquest.utilities.EGApplication;
import java.util.List;
public class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Question> takeExamResponse;
private final Context context;
FragmentNavigator fragmentNavigator;
String type = "";
private boolean isFinshed;
private EGApplication.Listener mListener;
public ViewPagerAdapter(Context context, FragmentManager fm, List<Question> response, FragmentNavigator fragmentNavigator, String type, boolean isFinshed, EGApplication.Listener mListener) {
super(fm);
this.takeExamResponse = response;
this.isFinshed = isFinshed;
this.context = context;
this.mListener = mListener;
this.fragmentNavigator = fragmentNavigator;
this.type = type;
}
@Override
public Fragment getItem(int position) {
return ViewPagerFragment.newInstance(context, takeExamResponse.get(position), fragmentNavigator, type, isFinshed, mListener, position);
}
@Override
public int getCount() {
return takeExamResponse.size();
}
@Override
public int getItemPosition(Object object) {
notifyDataSetChanged();
return POSITION_NONE;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
FragmentManager manager = ((Fragment) object).getFragmentManager();
FragmentTransaction trans = manager.beginTransaction();
trans.remove((Fragment) object);
trans.commit();
super.destroyItem(container, position, object);
}
}
我需要一些最佳解决方案。更新: 为了检测问题,我建议您尝试:
std::错误的\u alloc
可能是由内存泄漏引起的
FragmentPagerAdapter
将片段保存在内存中。(当片段变为不可见时,片段只会被分离,而不会被移除。)在您浏览了许多页面后,内存将不足
所以你应该使用。FragmentStatePagerAdapter
在片段不可见时删除片段
或者,您应该从onDestoryView
方法中的片段中删除引用。
像这样:
public class ViewPagerFragment extends Fragment {
...
private FragmentNavigator fragmentNavigator;
private String type = "";
private boolean isFinshed;
private Question question;
private EGApplication.Listener mListener;
...
@Override
public void onDestroyView() {
super.onDestroyView();
fragmentNavigator = null;
mListener = null;
question = null;
//other things might be necessary for prevent memory leaks.
}
}
对于屏幕外的页面数量,或使用FragmentStatePagerAdapter。
asynctask也可能导致内存泄漏。请确保在片段中正确使用它们。查看寻呼机转换器的集合
否,您需要使用开发工具来确定问题所在。使用方法跟踪来确定您的时间花在哪里。使用LogCat检查与崩溃相关的Java堆栈跟踪。等等。@Commonware当我加载更多的片段以查看寻呼机时,它会毫无例外地发生。@Commonware我已经更新了我的日志。也没有内存泄漏。@Boopathi你尝试过FragmentStatePagerAdapter吗?现在我会奖励你,但我会再次为这个问题提供奖励。我也在为此使用改装…还有使用泄漏金丝雀检查内存泄漏。
public class ViewPagerFragment extends Fragment {
...
private FragmentNavigator fragmentNavigator;
private String type = "";
private boolean isFinshed;
private Question question;
private EGApplication.Listener mListener;
...
@Override
public void onDestroyView() {
super.onDestroyView();
fragmentNavigator = null;
mListener = null;
question = null;
//other things might be necessary for prevent memory leaks.
}
}
viewpager.setOffscreenPageLimit(count);