Исключение нехватки памяти в ListView и pagerview вместе

Я создаю приложение с ListView и ViewPager. Я использовал FragmentStatePagerAdapter как pageradapter.

при нажатии на элемент в списке откройте pagefragment для загрузки подробных данных. Я отслеживаю память, выделенную на мониторе Android Studio, когда выделяется память по элементу в списке.

Моя проблема здесь: когда вы возвращаетесь из пейджера в список и нажимаете на элемент, память снова выделяется. если я сделал эти шаги, выдается OutOfMemory. я использую

андроид: большая куча = "истина"

Но не работает для меня. Некоторая часть моего кода:

просмотр списка onItemClickListener:

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //peace of code that create launch new fragment with swipe view inside

                FragmentPager fragmentPager = new FragmentPager();
                Bundle bundle = new Bundle();
                bundle.putInt("CURRENT_POSITION", position);

                bundle.putParcelableArrayList("DATA_LIST", data);

                fragmentPager.setArguments(bundle);
                FragmentManager fragmentManager = getSupportFragmentManager();
                FragmentTransaction ft = fragmentManager.beginTransaction();
                ft.replace(R.id.container, fragmentPager, "swipe_view_fragment");
                ft.addToBackStack(null);
                ft.commit();

            }
        });

Мой Фрагментпейджер:

public class FragmentPager extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

        if(v==null)
            v = inflater.inflate(R.layout.fragment_pager, container, false);
        if(mViewPager==null)
            mViewPager = (ViewPager) v.findViewById(R.id.pager_view);

        currentPosition = getArguments().getInt("CURRENT_POSITION");

        data = getArguments().getParcelableArrayList("DATA_LIST");


        FragmentItemPagerAdapter fragmentItemPagerAdapter = new FragmentItemPagerAdapter(getFragmentManager(), data,this.getActivity());
        mViewPager.setOffscreenPageLimit(1);
        mViewPager.setAdapter(fragmentItemPagerAdapter);
        mViewPager.setCurrentItem(currentPosition);
        fragmentItemPagerAdapter.notifyDataSetChanged();

        return v;
    }
}

и мой FragmentItemPagerAdapter:

public class FragmentItemPagerAdapter extends FragmentStatePagerAdapter {
@Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        super.destroyItem(container, position, object);
        container.removeView(container);
        /*if (position >= getCount()) {
            container.removeAllViews();
            FragmentManager manager = ((Fragment) object).getFragmentManager();
            FragmentTransaction trans = manager.beginTransaction();
            trans.remove((Fragment) object);
            trans.commit();
        }*/

    }

}

person Milad Alizadeh    schedule 22.06.2016    source источник
comment
под pagerView вы имеете в виду ViewPager? Я действительно рекомендую использовать RecyclerView в этом случае.   -  person Amir    schedule 22.06.2016
comment
А также это не проблема с ViewPager или ListView, вы должны предоставить более подробную информацию о том, что происходит. Также Google не рекомендует устанавливать большую кучу.   -  person Amir    schedule 22.06.2016
comment
Я могу ошибаться здесь, но вам не нужно создавать пейджер снова и снова. Используйте «FragmentManager.findFragmentById» из «FragmentManager.findFragmentByTag», чтобы проверить, существует ли уже фрагмент. Если это не так, создайте новый экземпляр. Что касается потребления памяти, что делает макет? Отображает ли он большие изображения?   -  person GPuschka    schedule 22.06.2016
comment
@GPuschka: мои взгляды основаны на тексте.   -  person Milad Alizadeh    schedule 22.06.2016
comment
@Amir: как установить большую кучу?   -  person Milad Alizadeh    schedule 22.06.2016
comment
@MiladAlizadeh На самом деле вам не нужно устанавливать большую кучу. ваша проблема из-за неправильного распределения ресурсов, поэтому установка большой кучи ничего не решает.   -  person Amir    schedule 22.06.2016
comment
@Amir: я комментирую каждую строку своего фрагмента, просто показываю пустой фрагмент без создания объекта, но исключение остается.   -  person Milad Alizadeh    schedule 22.06.2016
comment
Вы можете выложить весь исходный код на gitHub?   -  person Amir    schedule 22.06.2016
comment
Я новичок в Android и просто использую образец для этого, мой код может быть неправильным. есть ли лучшее решение?   -  person Milad Alizadeh    schedule 22.06.2016
comment
Также FragmentItemPagerAdapter кажется глючным.   -  person Amir    schedule 22.06.2016
comment
Я не знаю, какую именно логику вы хотите реализовать!   -  person Amir    schedule 22.06.2016
comment
у меня есть большой список (для опыта: 4000 элементов в списке) и просмотрщик для прокрутки между страницами, пользователю (конкретному пользователю, а не обычному пользователю) нужно загрузить список один раз и работать с ним в течение недели, а затем вернуться к организации и загрузить новый список.   -  person Milad Alizadeh    schedule 22.06.2016
comment
Не могли бы вы опубликовать модель, для которой вы передали список данных?   -  person Krutik    schedule 22.06.2016
comment
У меня есть список заголовков в представлении списка и я показываю некоторые из них, затем передаю заголовок в viewpager, показываю все поля заголовка и заполняю детали на основе. (например, основной подробный вид)   -  person Milad Alizadeh    schedule 22.06.2016


Ответы (2)


Попробуй это

поставить в Mainfest--->

<application
        android:largeHeap="true"
    >
.....
   </application>

может это поможет

person Sreekanth    schedule 22.06.2016

Возможно, ваши методы readFromParcel и writeToParcel не совпадают, и если вы можете избежать передачи всего списка массива во фрагмент.

person Krutik    schedule 22.06.2016