第七章 UI fragment 与 fragment 管理器
由于activity不具备在运行时组装的灵活性,为了满足用户和设备的需求,故有了fragment。
一.UI fragment
- activity管理fragment需要:
- 在其布局中为fragment的视图安排位置(可采用FrameLayout,用容器视图资源ID来标志)。
- 管理fragment实例的生命周期。
- 创建UI fragment(继承Fragment):
- 定义用户界面布局文件
- 创建fragment类
- 实例化组件
View view = inflater.inflate(
R.layout.fragment_crime_list,//布局的资源ID
container,// 视图的父视图
false);//以代码方式添加视图
二.fragment 管理器
- FragmentManager管理:
- fragment队列
- fragment事务回退栈(trasaction)
import android.os.Bundle;
import android.support.annotation.LayoutRes;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
public abstract class SingleFragmentActivity extends AppCompatActivity {
protected abstract Fragment createFragment();
@LayoutRes
protected int getLayoutResId() {
return R.layout.activity_fragment;//占位,重写之后返回不同的资源
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutResId());
FragmentManager fm = getSupportFragmentManager();//获取FragmentManager
Fragment fragment = fm.findFragmentById(R.id.fragment_container);//**容器视图资源ID**
if (fragment == null) {
fragment = createFragment();
fm.beginTransaction()
.add(R.id.fragment_container, fragment)
.commit();
}
}
}
三.总结
- fragment 事务用来添加、移除、替换、附加或分离fragment队列中的fragment,这是fragment
动态组装
和重新组装
的关键。- 可理解为:创建一个新的事务,执行了一个fragment添加操作,最后提交该事物。
四.相关小记
- 容器视图资源ID的作用:
- 告诉FragmentManager ,fragment视图应该出现在activity的什么位置、
- 唯一标志FragmentManager队列中的fragment。
- fragment是针对整个屏幕封装关键组件以方便复用。而使用定制视图实现零碎小组件复用(使用view子类)。
- 使用支持库版fragment的应用,无论在哪台设备上运行,都会有相同的表现。
五.挑战练习
- 无