You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

现有Fragment应用集成ArFragment(SceneForm)遇运行崩溃,求正确步骤

Fixing the ArFragment Crash When Using Dynamic Fragment Loading

Hey Peter, I see exactly where the issue is here—your custom ItemOneFragment is breaking the core functionality of ArFragment by overriding onCreateView incorrectly. Let me break this down and show you the right way to do it.

The Root Cause

ArFragment comes with its own built-in layout that includes critical AR components: the camera preview surface, plane detection overlays, session controls, and more. When you override onCreateView and return your own empty FrameLayout, you're completely replacing the layout that ArFragment needs to initialize its AR system. That's why your app crashes at runtime—none of the required AR views are being created, leading to hidden null pointer exceptions or missing component errors.

Correct Approaches to Implement a Custom ArFragment

Option 1: Use ArFragment's Default Layout (Simplest)

If you don't need extra UI elements on top of the default AR view, just remove the onCreateView override entirely. Let ArFragment handle loading its own layout. Here's the fixed ItemOneFragment.java:

package com.google.ar.sceneform.samples.hellosceneform;

import android.os.Bundle;
import com.google.ar.sceneform.ux.ArFragment;

public class ItemOneFragment extends ArFragment {
    public static ItemOneFragment newInstance() {
        return new ItemOneFragment();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Add your AR-specific initialization logic here (e.g., configure plane detection, load models)
    }

    // Remove the onCreateView override—let ArFragment use its default layout
}

Option 2: Add Custom UI on Top of ArFragment's Layout

If you need to include your own UI elements (like buttons, text, etc.), inflate your custom layout and add it as a child to the ArFragment's root view instead of replacing it. Modify ItemOneFragment.java like this:

package com.google.ar.sceneform.samples.hellosceneform;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.google.ar.sceneform.ux.ArFragment;

public class ItemOneFragment extends ArFragment {
    public static ItemOneFragment newInstance() {
        return new ItemOneFragment();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // First, load the default ArFragment layout
        View arRootView = super.onCreateView(inflater, container, false);
        
        // Inflate your custom layout and add it to the AR root view
        View customView = inflater.inflate(R.layout.fragment_item_one, container, false);
        ((ViewGroup) arRootView).addView(customView);
        
        return arRootView;
    }
}

Verify Your Activity Setup

Your changes to HelloSceneformActivity.java and activity_ux.xml are actually correct—using a FrameLayout as the fragment container and loading the fragment via FragmentTransaction is the right way to handle dynamic fragments. Just make sure your app's AndroidManifest.xml still includes all required ARCore permissions and metadata:

  • android.permission.CAMERA
  • The com.google.ar.core meta-data (to declare ARCore support)

Quick Recap of the Fix

  • Never replace the ArFragment's default layout by returning a custom view directly from onCreateView—this breaks its internal AR initialization.
  • Either let ArFragment use its default layout, or add your custom UI as a child to its root view.
  • Ensure your manifest has all necessary ARCore requirements.

This should resolve the runtime crash and let your dynamic AR fragment work properly.

内容的提问来源于stack exchange,提问作者Peter Yin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:21:16