我已经开始使用此How do I add a Fragment to an Activity with a programmatically created content view
了在活动中创建和添加片段。
但是当我试图在动态视图中添加相同的片段时,它失败了。
请你解决背后的问题。
public class MainActivity extends FragmentActivity {
private static final int CONTENT_VIEW_ID = 10101010;
private static final int CONTENT_VIEW_ID1 = 10101011;
public FragmentManager fm = getSupportFragmentManager();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View view = new View(this);
FrameLayout frame = new FrameLayout(this);
frame.setId(CONTENT_VIEW_ID);
frame.addView(view,new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
view.setId(CONTENT_VIEW_ID1);
setContentView(frame);
if (savedInstanceState == null) {
Fragment newFragment1 = new DebugExampleTwoFragment();
FragmentTransaction ft = fm.beginTransaction();
ft.add(CONTENT_VIEW_ID1, newFragment1);
ft.commit();
}
public static class DebugExampleTwoFragment extends Fragment {
public static int count = 0;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = new View(getActivity());
v.setBackgroundColor(Color.RED);
return v;
}
}
ClassCastException
失败,未显示确切的行号。
答案 0 :(得分:3)
您可能会收到这样的消息:
java.lang.ClassCastException:android.view.View无法强制转换为 android.view.ViewGroup
那是因为片段可以插入ViewGroup
或继承自ViewGroup
的东西。您无法将片段插入View
。要使代码运行,请更改此行:
View view = new View(this);
例如,这个:
FrameLayout view = new FrameLayout(this);//FrameLayout inherits from ViewGroup