我正在与ArCore合作开发一个项目。
我正在尝试在另一个Fragment中创建ArFragment对象的实例。它一直返回null。
我有一个Activity,即MainActivity,在ViewPager中总共使用了3个片段。
ArFragment返回空-图片
当我尝试从第二个活动创建ArFragment对象时,它起作用了。但是将Arfragment从第二个活动传递到Fragment会导致糟糕的用户体验,所以我宁愿避免这种情况。
有什么方法可以在另一个Fragment中创建ArFragment吗?
答案 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
...
}
...
答案 1 :(得分:0)
我模糊地记得您需要使用其他函数来在片段中查找片段。这对我毫无问题地起作用:
arFragment = getChildFragmentManager()。findFragmentById(R.id.ar_fragment);
希望这会有所帮助:)
答案 2 :(得分:0)
在Android中,Activity
本身可以包含多个Fragments
。 Activity
运行时,您可以独立地操作每个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();