How to quickly make the transition to viewing using the fragment?

Here I have questions about how to quickly view a pager with a fragment.

An explanation of what I am doing:

I have a snippet that contains five web views and one list view to show relevant data. Based on the amount of content, I load the snippet in the viewpager with the relevant data. The implementation is very good, but the performance of the view pager is very slow.

Code snippet:

Loading the pager adapter:

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

I am making an exam-type app that has 100 to 150 questions for each exam. When I load a question from 30 to 150 using a fragments app that slows down and sometimes crashes.

Exception Exception Reported

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

- .

+4
3

UPDATE:

, :

std::bad_alloc .

FragmentPagerAdapter . ( , , .) , , .

FragmentStatePagerAdapter.
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.
    }
}
+3
viewpager.setOffscreenPageLimit(count); 

FragmentStatePagerAdapter. asynctask , , .

+2

Source: https://habr.com/ru/post/1649197/


All Articles