遇到的第一个难点:Fragment
使用方式:
activity托管UI fragment有如下两种方式:
-
在activity布局中添加fragment,简单但不够灵活。
-
在activity代码中添加fragment,可以动态控制fragment。
创建Fragment
- 创建fragment类并定义用户界面布局文件;
- 编写代码以实例化组件。
- 创建fragment类并定义用户界面布局文件
new->Fragment—>Fragment(Blank)就完事了,在刚建的布局文件里改一改,加入所需要的东西。
- 修改java文件中onCreateView方法
把return inflater.inflate(R.layout.fragment_blank, container, false)改成View v = inflater.inflate(R.layout.fragment_blank, container, false);下面实例化组件,最后return v。
比如这样:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_crime, container, false);
textview = v.findViewById(R.id.textview);
...
return v;
}
向 FragmentManager 添加 UI fragment
FragmentManager类负责管理fragment并将它们的视图添加到activity的视 图层级结构中。
要托管的Activity的布局文件将布局改为FrameLayout,FrameLayout的id改为fragment_container
在要托管的Activity的onCreate()方法中增加:
FragmentManager fm = getSupportFragmentManager(); //获得FragmentManager
Fragment fragment = fm.findFragmentById(R.id.fragment_container);//通过容器视图资源ID,向FragmentManager请求并获取fragment,如果要获取的fragment在队列中, FragmentManager就直接返回它
if (fragment == null) { //如果指定容器视图资源ID的fragment不存在,则fragment变量为空值
fragment = new CrimeFragment(); //新建CrimeFragment,并启动一个新的fragment事务,将新建fragment添加到队列中
fm.beginTransaction() //开启事务
.add(R.id.fragment_container, fragment)//添加fragment
.commit();//提交
}
成功了,其他的都不会