1

ピクチャーアルバムアプリを作成しようとしています。しかし、新しいフラグメントを作成すると、古いフラグメントが残り、そこに含まれるビットマップがすぐにメモリをいっぱいにして、メモリ不足エラーが発生します。

これが私がやろうとしていることです:

私には3つのカテゴリーがあるとしましょう。結婚式の写真、夏休みなど。各カテゴリをクリックした後、その横にあるフラグメントで写真を表示したいと思います。

メインビューでは、MasterDetailFlowテンプレートのFragmentActivityを使用しています(Eclipseで新しいAndroidプロジェクトを作成する場合)。つまり、基本的には、listView(ここに私のカテゴリがあります)とframelayoutを備えた1つのフラグメントがあり、他のフラグメントを配置します。

写真用のViewPagerが欲しかったので、

android.support.v4.view.ViewPager

フレームレイアウト内(Activity onItemSelected :):

fragment = new PagerFragment();
fragment.setArguments(arguments);
getSupportFragmentManager().beginTransaction()
     .replace(R.id.item_detail_container, fragment).commit();

このフラグメントは、基本的にセットアップに使用されます。

onCreateView ....
rootView = inflater.inflate(R.layout.pager, container, false);

    myFragmentStatePagerAdapter = new MyFragmentStatePagerAdapter(
            getActivity().getSupportFragmentManager(), pictures);
    mViewPager = (ViewPager) rootView.findViewById(R.id.pager);
    mViewPager.setAdapter(myFragmentStatePagerAdapter);

    return rootView;

一方、アダプタはgetItemメソッドに新しいPictureFragmentを作成します。

PictureFragmentは、BitmapFactoryとLruCacheを使用して画像をフェッチします。PictureFragmentとonDestroyView()にWeakReferenceをビットマップに格納します。

if (bitmapReference !=null){
        bitmapReference.get().recycle();
        bitmapReference = null;
    }

今問題に。1つのPagerFragment内では、すべて問題ないように見えます。PicturesFragmentsが作成され、破棄されます。メモリは制御されているようです。しかし、他のリスト要素のアクティビティをクリックすると問題が発生します。ログを見ると、ページャービュー用に2つの新しいフラグメントが作成されていることがわかります。また、onDestroyView()メソッドがPagerFragmentで呼び出されたが、PictureFragmentでは呼び出されなかったことがわかります。したがって、メモリ不足エラー。だから私は何を間違えますか?中のPicturesFragmentとビットマップを削除するにはどうすればよいですか?

手伝ってくれてありがとう

W

4

1 に答える 1

0

同じ問題かどうかはわかりませんが、しばらく前に、フラグメント ライフサイクル メソッドが呼び出されず、フラグメント マネージャーに問題があるビューページャーに問題がありました。

そのため、次の場所にアダプタを作成すると:

myFragmentStatePagerAdapter = new MyFragmentStatePagerAdapter(
        getActivity().getSupportFragmentManager(), pictures);

supportFragmentManager の代わりに childFragmentManager を使用してみて、問題が解決するかどうかを確認してください。

于 2013-02-28T00:07:51.440 に答える