如何解决正在获取Android片段,未找到ID的视图
首先,我检查了此问题是否已完成,并测试了该站点上说明的解决方案(尽管由于存在许多可能的错误原因,我在执行这些操作时可能犯了错误)。>
我的意思是像这里提供的解决方案:
Android Fragment no view found for ID?
在这里:
Android Fragment : No view found for id 0x7f040034
所以,我正在解释我的特殊情况。
首先,我在片段中设置如下布局:
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
root = inflater.inflate(R.layout.activity_calendario_laboral,container,false);
return root;
}
该布局概述如下:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/principal">
[...]
</LinearLayout>
</FrameLayout>
创建视图后,我可以调用此方法:
final Fragment thisFragment=this;
KotlinClass.Companion.setCalendarViewdateListener(calendarView,thisFragment,R.id.principal);
在KotlinClass的方法中,我可以调用此函数:
setFragment(FichajesFragment(),fragment,"Fichajes",id);
thisFragment作为参数片段传递给setCalendarViewdateListener函数。
我终于像这样定义了setFragment:
private fun setFragment(fragment: Fragment,fragment2: Fragment,tag: String,id: Int) {
val fragmentManager: FragmentManager = fragment2.activity!!.getSupportFragmentManager();
val fragmentTransaction = fragmentManager.beginTransaction()
for (activeFragment in fragmentManager.fragments) {
fragmentTransaction.remove(activeFragment)
}
fragmentTransaction.add(id,tag)
fragmentTransaction.commit()
fragmentManager.executePendingTransactions()
}
在执行fragmentManager.executePendingTransactions()时,它会导致出现异常,该现象表明没有找到ID的视图,这是引用线性布局的主体ID的。
我想念什么?
解决方法
如果我理解正确,我认为您必须在布局文件中指定参数:
let REItemsGeos: string[] = response.products
?.find((x: any) => x.code === "realestate")
?.items?.map(({ geo }) => geo);
我注意到了几个问题,但是导致您的应用崩溃的主要问题是由于这一部分:
val fragmentManager: FragmentManager = fragment2.activity!!.getSupportFragmentManager();
val fragmentTransaction = fragmentManager.beginTransaction()
for (activeFragment in fragmentManager.fragments) {
fragmentTransaction.remove(activeFragment)
}
在fragmentManager
中存储了属于托管fragment2
的活动的fragmentManager,在您的情况下,其片段的布局包括ID为@+id/principal
的Linearlayout。然后,在您的for
循环中,删除该fragmentManager
管理的所有片段,这也意味着您也从其中删除了fragment2
。因此,当您稍后致电:
fragmentTransaction.add(id,fragment,tag)
找不到ID为@+id/principal
的任何视图,因为包含该Linearlayout(fragment2
)的片段刚刚被删除。
因此,要使您的代码正常工作,请删除for
循环,该应用程序不应再崩溃。但是,按照您的代码示例的样子,我假设您要添加FichajesFragment
作为fragment2
的一部分,在这种情况下,您使用的是错误的fragmentManager
;而不是活动一项,您应该使用属于fragment2
的一项,即:
val fragmentManager: FragmentManager = fragment2.childFragmentManager
还有一点要注意:R.layout.activity_calendario_laboral
让我感到困惑,但是如果我正确理解的话,布局实际上就是片段的布局,所以就知道了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。