あるカスタムフラグメントを別のカスタムフラグメントに単純に置き換えようとしています。最初のカスタムフラグメントが呼び出され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));
}
}