我试图在FragmentActivity中使用Fragment,如下所示:
TutViewerFragment viewer = (TutViewerFragment)
getSupportFragmentManager().findFragmentById(R.id.tutview_fragment);
我的TutViewerFragment
延伸Fragment
。但是我收到了一个错误:
无法从Fragment转换为TutViewerFragment。
我真的不明白为什么会这样。为什么不能演员呢?
答案 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.Fragmentpublic 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)