2012-03-06 30 views
31

我试图用一个片段在FragmentActivity像这样:FragmentActivity:不能从片段转换为派生类

TutViewerFragment viewer = (TutViewerFragment)  
getSupportFragmentManager().findFragmentById(R.id.tutview_fragment); 

而且我TutViewerFragment延伸Fragment。然而我得到一个错误:

Cannot cast from Fragment to TutViewerFragment.

我真的不明白为什么会发生这种情况。为什么不能投射?

+1

你确定TutViewerFragment是扩展Fragment吗? – 2012-03-06 15:05:24

+0

我很积极。看看:http://pastie.org/3534066 – 2012-03-06 15:07:10

+0

你可以粘贴你的xml 元素吗?你还使用什么兼容性包? – Sid 2012-03-06 15:08:02

回答

70

您正在扩展错误的Fragment类。导入android.support.v4.app.Fragment而不是android.app.Fragment。扩展片段需要进口

android.support.v4.app.Fragment; 

,而不是

android.app.Fragment; 

我猜它与Android兼容包做的类:

+13

或者调用'getFragmentManager'而不是'getSupportFragmentManager'。 – theblang 2014-03-24 19:46:41

+0

感谢@mattblang请你详细说明差异。 – Mayank 2015-01-19 19:13:33

+0

'getFragmentManager'返回一个本地片段,而'getSupportFragmentManager'返回一个支持片段。 'getSupportFragmentManager'是支持库的一部分/添加,因为它们不能改变现有方法的返回类型。 – devconsole 2015-01-19 19:42:03

6

由于devconsole在上面的评论中指出。问题现在已解决!

3

由于devconsole /指定伊戈尔,我们需要确保在这两个类中使用的片段类相同。 即andorid.app.Fragment两个

public class WorkoutDetailFragment extends Fragment 

,并在活动类,我们试图让该片段的引用。

WorkoutDetailFragment workoutDetailFragment = (WorkoutDetailFragment)getFragmentManager().findFragmentById(R.id.detail_frag); 

确保两个文件中的相同片段类将解决类转换异常。

希望这会有所帮助。我知道它有点晚了。我是Android的新手,并探索精彩语言的细微差别。感谢Stackoverflow帮助我解决这些小问题。

相关问题