gpt4 book ai didi

android - 如何使用 fragment 使 viewpager 快速转换?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:26:59 24 4
gpt4 key购买 nike

这里我有一个问题,比如如何使用 fragment 快速查看寻呼机。

我在做什么的解释:

我有一个 fragment ,其中包含五个 Web View 和一个 ListView 以显示相应的数据。根据内容计数,我将 fragment 加载到带有相应数据的 viewpager。实现明智一切都很好,但 View 寻呼机的性能非常非常慢。

代码 fragment :

寻呼机适配器加载:

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);

寻呼机适配器:

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);
}
}

我正在做考试类应用,每次考试有 100 到 150 个问题。当我使用 fragment 应用程序加载 30 到 150 个问题时,有时会变慢甚至崩溃。

有未捕获的异常信息

07-31 23:50:25.350 22065-22065/exam.test E/ApkAssets: Error while loading asset assets/natives_blob_64.bin: java.io.FileNotFoundException: assets/natives_blob_64.bin
07-31 23:50:25.350 22065-22065/exam.test E/ApkAssets: Error while loading asset assets/snapshot_blob_64.bin: java.io.FileNotFoundException: assets/snapshot_blob_64.bin
07-31 23:50:27.499 22065-23275/exam.test E/libEGL: validate_display:255 error 3008 (EGL_BAD_DISPLAY)
07-31 23:52:00.941 22065-22065/exam.test E/libc++abi: terminating with uncaught exception of type std::bad_alloc: std::bad_alloc
07-31 23:52:01.359 22065-22065/exam.test A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 22065

为此我需要一些最佳解决方案。

最佳答案

更新:

要检测问题,我建议您尝试:

  1. 检查 AndroidStudio 的 Memory Monitor确认内存没有问题。

  2. 在Fragment中隐藏布局部分。然后如果滑动变得平滑,问题出在布局上。

  3. 尝试 Hardware Acceleration .它可能会有所改善。

原创

std::bad_alloc 可能是内存泄漏导致的。

FragmentPagerAdapter 将 fragment 保存在内存中。 (当fragment变得不可见时,fragment只是detach,并没有被移除。)你刷了很多页后,内存会不够。

所以你应该使用FragmentStatePagerAdapter .
FragmentStatePagerAdapter 当 fragment 变得不可见时移除 fragment 。

或者您应该在 onDestoryView 方法中删除 Fragment 的引用。像这样:

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.
}
}

关于android - 如何使用 fragment 使 viewpager 快速转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38596822/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com