在另一个片段

时间:2018-09-26 11:51:34

标签: java android android-viewpager augmented-reality arcore

我正在与ArCore合作开发一个项目。

我正在尝试在另一个Fragment中创建ArFragment对象的实例。它一直返回null。

我有一个Activity,即MainActivity,在ViewPager中总共使用了3个片段。

ArFragment返回空-图片

enter image description here

当我尝试从第二个活动创建ArFragment对象时,它起作用了。但是将Arfragment从第二个活动传递到Fragment会导致糟糕的用户体验,所以我宁愿避免这种情况。

有什么方法可以在另一个Fragment中创建ArFragment吗?

3 个答案:

答案 0 :(得分:1)

我想您应该在getChildFragmentManager中调用onActivityCreated

这是我的代码,它运行正确。 (很抱歉,这是科特林)

class MyFragment : Fragment() {
    private lateinit var arFragment: ARFragment

    override fun onCreateView(
        inflater: LayoutInflater, @Nullable container: ViewGroup?, @Nullable savedInstanceState: Bundle?
    ): View? {
        // fragment_sample contains ARFragment
        return inflater.inflate(R.layout.fragment_sample, container, false)
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        arFragment = childFragmentManager.findFragmentById(R.id.ar_fragment) as MyARFragment
        ...
     }
     ...

completely code

答案 1 :(得分:0)

我模糊地记得您需要使用其他函数来在片段中查找片段。这对我毫无问题地起作用:

arFragment = getChildFragmentManager()。findFragmentById(R.id.ar_fragment);

希望这会有所帮助:)

答案 2 :(得分:0)

在Android中,Activity本身可以包含多个FragmentsActivity运行时,您可以独立地操作每个Fragment,例如添加或删除它们。

每个 Fragment 都可以视为 View Controller 。 Android允许您将 子片段 放在 父片段 内。

以下是在另一个ArFragment中创建一个ArFragment的方法:

在科特林:

val arcoreFragment = MyARFragment()

childFragmentManager.beginTransaction().apply {
    add(R.id.ar_fragment, arcoreFragment)
    commit()
}

在Java中:

ArFragment arcoreFragment = new MyARFragment();

FragmentTransaction ta = getChildFragmentManager().beginTransaction();
ta.add(R.id.ar_fragment, arcoreFragment).commit();