内存不足在ListView和pagerview中的异常

时间:2016-06-22 06:57:14

标签: android listview android-viewpager out-of-memory fragmentstatepageradapter

我使用ListViewViewPager创建了一个应用程序。 我使用FragmentStatePagerAdapter作为pageradapter。

单击列表中的项目时,打开pagefragment以加载详细信息数据。 我点击项目时监视在android studio monitor中分配的内存 在列表视图中分配内存。

我的问题在这里: 当从寻呼机返回到列表,然后单击项目时,将再次分配内存。 如果我完成了这个步骤,就会抛出一个OutOfMemory。 我用

  

机器人:largeHeap = “真”

但对我不起作用。 我的一些代码:

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

            }
        });

My FragmentPager:

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();
        }*/

    }

}

2 个答案:

答案 0 :(得分:0)

试试这个

放入Mainfest ---&gt;

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

可能会有所帮助

答案 1 :(得分:0)

可能是你的readFromParcel和writeToParcel方法不匹配,如果你可以避免将整个数组列表传递给片段。