Android 如何使用fragment快速转换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

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

解释我正在做的事情:

我有一个片段,其中包含五个web视图和一个列表视图,以显示相应的数据。根据内容计数,我将片段加载到viewpager中,并显示相应的数据。实现方面都很好,但查看寻呼机的性能非常慢

代码段:

寻呼机适配器加载:

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

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

更新:

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

  • 检查AndroidStudio以确认内存没有问题

  • 在片段中隐藏布局的部分。然后,如果滑动变得平滑,则问题在于布局

  • 试试看。这可能会有所改善

  • 原创

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