2012-06-10 67 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上,或者它是否已經發送到後端堆棧等等)。

感謝您的回答,並且很抱歉沒有看到我的問題不存在(但是當項目變得複雜時,很難始終從問題出現的地方看到:/)。