【问题标题】:Can I use OnCreateView with the Activity or is only used with fragments?我可以将 OnCreateView 与 Activity 一起使用还是仅与片段一起使用?
【发布时间】:2018-01-05 05:40:38
【问题描述】:

如果 OnCreateView 仅适用于 Fragment,那么 Activity 会是什么?
我尝试了 OnCreate(),但无法使其工作

在第一个 Override 中我遇到了问题,在最后一个 Overide 中它也给我一个 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();
}

【问题讨论】:

  • 你应该研究“活动生命周期”......它清楚地显示了加载了哪些方法。然后与“片段生命周期”进行比较
  • edit您的问题包括您遇到的错误。 “我需要帮助,它不起作用,你能帮忙等吗?”不是问题,所以请不要将它们放在帖子中。谢谢!
  • 您是否不了解活动和片段生命周期。您如何转向开发。

标签: android android-fragments fragment-oncreateview


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    onCreate():

    您可以在 Fragment 中使用 onCreate(),它在 Activity 的 onAttachFragment() 之后但在该 Fragment 的 onCreateView() 之前调用。 在此方法中,您可以分配变量、获取 Intent extra 以及任何其他不涉及 View 层次结构的内容。但是,您不能在 Activity 中使用 onCreateView()

    onCreateView():

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

    【讨论】:

      【解决方案3】:

      活动仅使用onCreate。片段两者兼而有之。

      onCreate 使用setContentView,而不是充气机,或者super.onCreateView

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

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

      【讨论】:

      • 我已经删除了底部的 Override 并将 loadPanoImage() 移动到返回之前的第一个 Override。我将 onCreateActivity 更改为 onCreate,但 Override 仍然给我错误。
      • 再一次,Activity 没有onCreateView,所以没有,没有什么可以覆盖,这将是一个错误
      • Override public View onCreate(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);加载全景图像();返回 v; }
      • 你的方法现在命名为onCreate...一定是onCreateView,需要在一个Fragment中
      • 好的,现在我有一个 Activity,我正在使用 OnCreate() 和 panoWidgetView。现在应用程序构建成功,但是当我在模拟器中尝试时一切正常,除了它没有在 PanoView 中加载图像(当我转到 Panowidget 所在的 Activity 时应用程序崩溃。
      【解决方案4】:

      对于一个活动,我们有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(); 
          }  
      

      【讨论】:

        猜你喜欢
        • 2014-02-22
        • 2022-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-03
        • 2013-03-10
        • 1970-01-01
        相关资源
        最近更新 更多