0

ListViewViewPagerでアプリケーションを作成します。 私はFragmentStatePagerAdapterをpageradapterとして使用しました。メモリ不足ListViewとpagerviewでの例外

リストのアイテムをクリックすると、詳細データをロードするpagefragmentを開きます。 リストビューメモリ内のアイテム をクリックすると、アンドロイドスタジオモニタに割り当てられたメモリを監視します。

私の問題はここにあります: ページャからリストに戻ってアイテムをクリックすると、再びメモリが割り当てられます。 この手順を実行すると、OutOfMemoryがスローされます。 largeHeap = "true" を

しかし、私のために動作しません: 私は

アンドロイドを使用しています。 私のコードのいくつかの作品:

リストビュー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(); 

      } 
     }); 

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

    } 

} 
+0

by pagerあなたはViewPagerを意味しますか?この場合、RecyclerViewを使用することをお勧めします。 – Amir

+1

また、これはViewPagerやListViewでは問題にはなりません。何が起きているのか詳しく説明してください。また、Googleによって推奨されない大きなヒープを設定します。 – Amir

+0

ここで間違っているかもしれませんが、ページャーを何度も作成する必要はありません。フラグメントがすでに存在するかどうかを確認するには、 'FragmentManager.findFragmentByTag'の 'FragmentManager.findFragmentById'を使用します。そうでない場合は、新しいインスタンスを作成します。メモリ消費量は、レイアウトは何ですか?それは大きなイメージを表示していますか? – GPuschka

答えて

0

この

をお試しください

Mainfestでプット--->

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

それは

+0

は私のためには機能しません。 –

0

があなたのreadFromParcelとwriteToParcel方法が一致していないとすることができ、あなたがフラグメントに、アレイの全体のリストを渡すことを避けることができる場合に役立ちますがあります。