我可以将OnCreateView与Activity一起使用,还是只与片段一起使用?

时间:2018-01-05 05:40:39

标签: android android-fragments fragment-oncreateview

如果OnCreateView仅用于片段,那么Activity会是什么? 我试过OnCreate()而我无法让它工作

在第一个覆盖中我遇到了问题,在最后一个覆盖它也给了我一个OncreateView的错误。
我已经阅读了OnCreate()和OnCreateView(),但我找不到答案。

private VrPanoramaView panoWidgetView;
private ImageLoaderTask backgroundImageLoaderTask;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v =  inflater.inflate(R.layout.activity_pruebafoto, container,false);
    panoWidgetView = v.findViewById(R.id.pano_view);
    return v;
}

@Override
public void onPause() {
    panoWidgetView.pauseRendering();
    super.onPause();
}

@Override
public void onResume() {
    panoWidgetView.resumeRendering();
    super.onResume();
}

@Override
public void onDestroy() {
    // Destroy the widget and free memory.
    panoWidgetView.shutdown();
    super.onDestroy();
}

private synchronized void loadPanoImage() {
    ImageLoaderTask task = backgroundImageLoaderTask;
    if (task != null && !task.isCancelled()) {
        // Cancel any task from a previous loading.
        task.cancel(true);
    }

    // pass in the name of the image to load from assets.
    VrPanoramaView.Options viewOptions = new VrPanoramaView.Options();
    viewOptions.inputType = VrPanoramaView.Options.TYPE_STEREO_OVER_UNDER;

    // use the name of the image in the assets/ directory.
    String panoImageName = "@drawable/iglesiavr.jpg";

    // create the task passing the widget view and call execute to start.
    task = new ImageLoaderTask(panoWidgetView, viewOptions, panoImageName);
    task.execute(this.getAssets());
    backgroundImageLoaderTask = task;
}

@Override
public void onCreateView(@Nullable Bundle savedInstanceState) {
    super.onCreateView(savedInstanceState);
    loadPanoImage();
}

4 个答案:

答案 0 :(得分:0)

对于某项活动,我们有onCreate
您需要以下内容:

public class MainActivity extends Activity {  

    private VrPanoramaView panoWidgetView

    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_pruebafoto);  
        Log.i("lifecycle","onCreate invoked"); 
        panoWidgetView = (VrPanoramaView ) findViewById(R.id.pano_view);
        loadPanoImage(); 
    }  

答案 1 :(得分:0)

活动仅使用onCreate。碎片都有。

onCreate使用setContentView,而不是inflater,或super.onCreateView

此代码的错误是您定义了onCreateView 两次,第二个(位于底部),不会覆盖任何内容。它需要返回一个视图,但你有void。您似乎尝试定义onCreate,但将其保留为onCreateView

删除第二个,在返回之前将loadPanoImage()移动到第一个。

答案 2 :(得分:0)

onCreateView()仅在片段上调用,如果它是您可以使用onCreate()方法的活动。有关详细信息,请参阅此生命周期流程图。

https://github.com/xxv/android-lifecycle

https://github.com/xxv/android-lifecycle

答案 3 :(得分:0)

<强>的onCreate():

您可以在片段中使用onCreate(),在活动的onAttachFragment()之后但在片段的onCreateView()之前调用它。 在此方法中,您可以分配变量,获取Intent extras以及不涉及View层次结构的任何其他内容。但是,您无法在活动中使用onCreateView()

<强> onCreateView():

您可以指定View变量并执行任何图形初始化。您应该从此方法返回一个根视图,这是主视图,但如果您的Fragment不使用任何布局或图形,则可以返回null。