我尝试简单地用另一个自定义片段替换一个自定义片段。第一个自定义片段被调用MenuFragment
并扩展ListFragment
。创建活动时(onCreate),我将其插入到layout_container
我在 XML 中定义的布局(称为)中:
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
MenuFragment menufragment = new MenuFragment();
fragmentTransaction.add(R.id.layout_container, menufragment);
fragmentTransaction.commit();
在这里,我没有问题。
然后,当用户单击某些内容时,我想将其替换为名为AlbumsFragment
(也扩展了)的第二个片段。ListFragment
在我的 onClick 事件中,我放了:
AlbumsFragment albumsfragment = new AlbumsFragment();
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.layout_container, albumsfragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
在这里,新片段很好地显示并替换了菜单片段,但同时应用程序崩溃并且 LogCat 说:
E/AndroidRuntime(25105): java.lang.ClassCastException: com.music.musicapp.AlbumsFragment cannot be cast to com.music.musicapp.MenuFragment
我只使用和定位 Api 级别 15,所以我不使用 Android 支持包。
编辑: 这是我的专辑片段代码,非常简单,它只是一个包含两个项目“Album1”和“Album2”的列表。单击后我可以看到这两个项目,但应用程序立即崩溃。
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));
}
}