1

あるカスタムフラグメントを別のカスタムフラグメントに単純に置き換えようとしています。最初のカスタムフラグメントが呼び出されMenuFragment、拡張されListFragmentます。アクティビティが作成されると(onCreate)、XMLで定義したレイアウト(と呼ばれるlayout_container)に挿入します。

FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
MenuFragment menufragment = new MenuFragment(); 
fragmentTransaction.add(R.id.layout_container, menufragment);
fragmentTransaction.commit();

ここでは問題ありません。

次に、ユーザーが何かをクリックしたときに、AlbumsFragment(これも拡張される)という2番目のフラグメントに置き換えます。ListFragment私のonClickイベントで私は置きました:

AlbumsFragment albumsfragment = new AlbumsFragment(); 
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.layout_container, albumsfragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

ここでは、新しいフラグメントが適切に表示され、menufragmentを置き換えますが、同時にアプリがクラッシュし、LogCatは次のように言います。

 E/AndroidRuntime(25105): java.lang.ClassCastException: com.music.musicapp.AlbumsFragment cannot be cast to com.music.musicapp.MenuFragment

私はApiレベル15のみを使用してターゲットにしているため、Androidサポートパッケージは使用していません。

編集: これが私のアルバムフラグメントコードです。非常に単純です。これは、「Album1」と「Album2」の2つのアイテムを含むリストです。クリックを実行すると、これら2つのアイテムが表示されますが、すぐにアプリがクラッシュします。

package com.music.musicapp;

import java.util.ArrayList;

import android.app.ListFragment;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class AlbumsFragment extends ListFragment {

            // declare the array list
             ArrayList<String> array = new ArrayList<String>();

             @Override
                public void onActivityCreated(Bundle savedInstanceState) {
                    super.onActivityCreated(savedInstanceState);


                // Fill up Array 
                    array.add("album1");
                    array.add("album2");

                    setListAdapter(new ArrayAdapter<String>(getActivity(),
                            android.R.layout.simple_list_item_1, array));


                 }   

}
4

1 に答える 1

1

問題が解決しました、

を必要とする別のメソッドがあったMenuFragmentため、このフラグメントが に置き換えられたときAlbumsFragment、このメソッドは存在しないフラグメントを参照していたため、アプリをクラッシュさせていました。

したがって、投稿されたコードに問題はありませんでした。申し訳ありません。フラグメントを置き換えることの影響を考慮することが重要であり、それを参照するときは注意してください (フラグメントがまだ UI 上にあるかどうか、または既にバックスタックに送信されているかどうかなどを確認してください...)。

あなたの答えに感謝し、私の問題がそこになかったことに気付かなかったことをお詫びします(しかし、プロジェクトが複雑になると、問題がどこから来るのかを常に確認するのは困難です:/)。

于 2012-06-10T19:08:27.473 に答える