扩展Fragment时不会覆盖onCreate()

时间:2016-07-18 20:13:17

标签: android android-fragments

我有这段代码:

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()显然在这里丢失了。

为什么?

2 个答案:

答案 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}}通常不会被覆盖,并且没有任何问题...总是取决于你......