2012-06-10 39 views
1

我试图简单地用另一个替换一个自定义片段。第一个自定义片段被称为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(); 

这里的新片段很好的展示和替换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”名单。点击执行后,我可以看到这两个项目,但立即崩溃。

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)); 


       } 

} 
+0

我在任何地方发布的代码中都看不到转换......是代码中的其他位置?如果片段显示,这是片段的代码中的问题。发布您的专辑片段代码。 – Barak

回答

1

问题解决了,

我有其需要的MenuFragment并且因此,当该片段通过AlbumsFragment取代,此方法是使应用程序崩溃,因为它refered到没有更多的现存片段的另一方法。

所以问题不在代码发布,抱歉。考虑替换片段的影响是很重要的,在引用片段时要小心(检查它是否仍然在UI上,或者它是否已经发送到后端堆栈等等)。

感谢您的回答,并且很抱歉没有看到我的问题不存在(但是当项目变得复杂时,很难始终从问题出现的地方看到:/)。