Fragment和Custom View可以实现类似的功能,我知道Fragment比Custom View更可重用,使用Fragment还有其他好处/增强功能吗?片段是用来取代自定义视图,还是仅仅是为了某个特定目的而进行的增强
例如,下面的代码是片段:
公共类TestFragment扩展了片段{
私有文本视图tv_名称;
私人按钮btn_播放;
私人按钮btn_删除;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
返回充气机。充气(R.layout.testfragment,容器,假);
}
@凌驾
public void onStart(){
super.onStart();
tv_name=(TextView)getView().findViewById(R.id.tv_name);
btn_play=(按钮)getView().findviewbyd(R.id.btn_play);
btn_delete=(按钮)getView().findviewbyd(R.id.btn_delete);
}
}
自定义视图的代码:
公共类TestCustomView扩展了LinearLayout{
私有文本视图tv_名称;
私人按钮btn_播放;
私人按钮btn_删除;
公共TestCustomView(上下文、属性集属性){
超级(上下文,attrs);
设置方向(线性布局。水平);
setLayoutParams(新的LayoutParams(LayoutParams.MATCH_父级,LayoutParams.MATCH_父级));
tv_name=新文本视图(上下文);
addView(电视名称);
btn_play=新按钮(上下文);
添加视图(btn_播放);
btn_delete=新建按钮(上下文);
添加视图(btn_删除);
}
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
返回充气机。充气(R.layout.testfragment,容器,假);
}
}
TestFragment和TestCustomView都可以创建一个由TextView和按钮组成的视图,并使用Framelayout/fragment和com.packagename.TestCustomView标记在活动的xml布局文件中声明,但是使用fragment有什么好处呢
片段可以在不同的场景中使用,但最常用的是:
- 包装视图
- 无头碎片-即无视图=>通常没有多大帮助,但可以使用
- 可保留碎片-可以是上述任何一种。通过使用Fragment.setRetainInstance(true),您可以绕过Fragment.onDestroy(),即可以保留配置更改的片段数据,但片段视图结构仍然被销毁/重新创建
- 可添加到活动备份堆栈,即“轻松备份”按钮上一个状态还原
有些情况下,碎片会导致颈部完全疼痛,有些情况下,碎片可以更快地达到效果
对于一些定制和更灵活的情况,片段可能会变得杂乱无章,管理它们将是困难的。因此,直接处理视图非常方便,在某些情况下更有用。但一切都是基于需求的
注意视图也有自己的生命周期,可以存储/重新创建保存的实例状态。稍微多做一点工作,但它也有选择