FragmentActivity:无法从Fragment转换为派生类

时间:2012-03-06 15:03:50

标签: android casting android-fragments

我试图在FragmentActivity中使用Fragment,如下所示:

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

我的TutViewerFragment延伸Fragment。但是我收到了一个错误:

  

无法从Fragment转换为TutViewerFragment。

我真的不明白为什么会这样。为什么不能演员呢?

5 个答案:

答案 0 :(得分:77)

您正在扩展错误的Fragment类。导入android.support.v4.app.Fragment而不是android.app.Fragment

答案 1 :(得分:7)

正如 devconsole 在上面的评论中指出:扩展Fragment的类需要导入

android.support.v4.app.Fragment;

而不是

android.app.Fragment;

我想这与Android兼容包有关。问题现在已经解决了!

答案 2 :(得分:4)

以防人们正在寻找kotlin等价物:

myFragmentClass = supportFragmentManager.findFragmentById(R.id.my_fragment) as MyFindOfFragment

答案 3 :(得分:3)

指定 devconsole / igor 时,我们需要确保两个类中使用的Fragment类相同。

中的andorid.app.Fragment
public class WorkoutDetailFragment extends Fragment

并在Activity类中我们尝试获取片段的引用。

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

确保两个文件中的相同Fragment类将解决类强制转换异常。

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

答案 4 :(得分:2)

如果您已获取并导入android.support.v4.app.Fragment,请检查您是否使用 support FragmentManager和 Not fragmentManager。

科特琳:

//DO
import android.support.v4.app.Fragment

myFragment = supportFragmentManager.findFragmentById(R.id.my_fragment) as MyFragment

//DON'T
import android.app.Fragment

myFragment = fragmentManager.findFragmentById(R.id.my_fragment) as MyFragment

Java:

//DO
import android.support.v4.app.Fragment

myFragment =(MyFragment) getSupportFragmentManager().findFragmentById(R.id.my_fragment)

//DON'T
import android.app.Fragment

myFragment = (MyFragment) getFragmentManager().findFragmentById(R.id.my_fragment)