我有这段代码:
public class CrimeListFragment extends Fragment {
private RecyclerView mCrimeRecyclerView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_crime_list, container, false);
mCrimeRecyclerView = (RecyclerView) view
.findViewById(R.id.crime_recycler_view);
mCrimeRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
return view;
}
}
我知道在创建片段时,您需要单独实施onCreate()
和onCreateView()
。但是,onCreate()
显然在这里丢失了。
为什么?
答案 0 :(得分:1)
你单独调用onCreate()和onCreateView()
不,你也不打电话。 Fragment lifecycle会调用它们。
onCreate
不需要在简单的Fragment
类上实现,只需要Activity
个类
至于问题的标题 - 如果将片段添加到活动中,则应调用它。
答案 1 :(得分:0)
onCreate()
和onCreateView()
都可以被您覆盖。
return view;
更可选,你可以用来实例化一些变量(但你几乎不需要覆盖它)。
onCreateView()
是强制性的,因为您必须对所需的视图进行充气并将其返回(例如onCreate()
)。
在docs:
的onCreate()
系统在创建片段时调用此方法。在您的实现中,您应该在片段暂停或停止时初始化要保留的片段的基本组件,然后重新开始。
onCreateView()
当片段第一次绘制其用户界面时,系统会调用此方法。要为片段绘制UI,必须从此方法返回视图,该视图是片段布局的根。如果片段没有提供UI,则可以返回null。
您还可以检查片段生命周期。
如下图所示,如果从后台堆栈返回,则只会再次调用onCreateView()
...因此,您可以使用onCreate()
运行一些只能执行的代码一次(当Fragment被创建时......比如配置一些数组或类似的东西)......
然后,在向用户显示视图之前,只留下/*****************************
ALL BELOW JUST SIMULATING CASE
*****************************/
var c1 = document.getElementById("cool");
var ctx = c1.getContext("2d")
var elem=[0,0,50,0,100,0];
var elem2=[50,0,50,50,50,100];
var i=1;
var path = new Path2D();
path.moveTo(elem[i+1], elem[i+2]);
path.lineTo(elem2[i+1], elem2[i+2]);
path.lineTo(elem2[i-1], elem2[i]);
path.lineTo(elem[i+1], elem[i+2]);
path.closePath();
ctx.fillStyle = getRndColor();
ctx.strokeStyle = ctx.fillStyle;
ctx.fill(path);
ctx.stroke(path);
//this function shouldn't have impact on problem, but i put it here just in case
var getRndColor = function () {
var r = 255*Math.random()|0,
g = 255*Math.random()|0,
b = 255*Math.random()|0;
return 'rgb(' + r + ',' + g + ',' + b + ')';
}
/*****************************
ALL ABOVE JUST SIMULATING CASE
*****************************/
var changeElement = function(path) {
ctx.fillStyle = "rgba(0,0,0,0)";
ctx.strokeStyle = ctx.fillStyle;
ctx.fill(path);
ctx.stroke(path);
console.log(ctx.fillStyle);
}
changeElement(path); //if you try e.g. 50% opacity, you will see that color blends
以刷新/膨胀视图。
但是:{{1}}通常不会被覆盖,并且没有任何问题...总是取决于你......
: