我开始学习Android,在创建片段时遇到问题。我已经尝试在每个教程指定的几乎所有方式中在代码中创建一个片段,但每次我执行该程序时立即崩溃并且我得到一个日志错误“找不到[容器片段的id]的视图”。
我创建片段的活动是:
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
FragmentTestActivity activity = new FragmentTestActivity();
ft.add(R.id.fragment_container, activity);
ft.commit();
}
}
片段本身,如果
public class FragmentTestActivity extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup parent,
Bundle savedInstanceState) {
View vw = inflater.inflate(R.layout.fragment, parent, false);
return vw;
}
}
片段的布局是
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragment_container" >
</FrameLayout>
目前它没有做任何有用的事情,我只是想看看我是否可以在继续做任何有用的事情之前创建一个片段,但每次我尝试该程序都会崩溃。
答案 0 :(得分:1)
activity_main.xml
必须有FrameLayout
,标识为fragment_container
。
您的FrameLayout
是容器。您将片段添加到FrameLayout
。您的片段由活动托管。
另外,我认为你不需要在片段布局中使用FrameLayout。您可以为片段布局提供其他视图。
答案 1 :(得分:0)
ft.add(R.id.fragment_container, activity);
在此fragment_container
中需要处于活动布局而不是片段布局。
答案 2 :(得分:0)
通过这样做
ft.add(R.id.fragment_container, activity);
您正尝试将片段添加到ID为R.id.fragment_container
的MainActivity内的视图中。由于fragment_container
是Fragment布局的一部分而不是MainActivity布局的一部分,因此会导致错误。
确保您的MainActivity布局中有一个ID为R.id.fragment_container
的ViewGroup,并在Fragment布局中重命名ViewGroup的主要ID。