Android 未找到片段id为0x7f080032的视图

Android 未找到片段id为0x7f080032的视图,android,android-fragments,kotlin,Android,Android Fragments,Kotlin,您好,我已经尝试了很多方法来寻找解决方案,并且尝试了很多不同的方法(在Java中),但是没有一种方法对我有效,我的方法也与Stackoverflow中已有的方法有点不同,所以我必须再次问这个问题 我会尽快解释我在做什么, 我有一个main活动,它有一个底部导航视图,其中包含5个片段 在其中一个(ManageTasksFragment)中,我有一个ViewPager,它有两个选项卡(两个子片段)ManageGivenFragment和ManageDoingFragment,目前为止还不错 Mana

您好,我已经尝试了很多方法来寻找解决方案,并且尝试了很多不同的方法(在
Java
中),但是没有一种方法对我有效,我的方法也与
Stackoverflow
中已有的方法有点不同,所以我必须再次问这个问题

我会尽快解释我在做什么, 我有一个
main活动
,它有一个
底部导航视图
,其中包含5个
片段

在其中一个(
ManageTasksFragment
)中,我有一个
ViewPager
,它有两个选项卡(两个子片段)
ManageGivenFragment
ManageDoingFragment
,目前为止还不错

ManageTasksFragment.kt

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_manage_given_details, null, false)
}
现在我有了一个名为
ManageGivenDetailsFragment
的新片段,它应该是
ManageGivenFragment
的子片段,但是当我尝试替换该片段时,应用程序崩溃,我得到了错误

java.lang.IllegalArgumentException: No view found for id 0x7f080032 (it.dobeedo.dobeedo:id/container) for fragment ManageGivenDetailsFragment
ManageGivenFragment.kt

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_manage_given_details, null, false)
}
在上面的代码中,我尝试了
null
container
作为
充气机的
root
,因为有人建议将其更改为
null
,但仍然不起作用

如果你需要一个特定部分的更多代码,请让我知道,我会很高兴得到你的帮助

更新

MainActivity.kt

更新2

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="it.dobeedo.dobeedo.Activities.MainActivity">

<include
    android:id="@+id/action_bar"
    layout="@layout/action_bar"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />


<FrameLayout
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    app:layout_constraintBottom_toTopOf="@+id/navigationView"
    app:layout_constraintTop_toBottomOf="@+id/action_bar" />

<android.support.design.widget.BottomNavigationView
    android:id="@+id/navigationView"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginEnd="0dp"
    android:layout_marginStart="0dp"
    android:background="?android:attr/windowBackground"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:itemBackground="@color/colorPrimary"
    app:itemIconTint="@color/colorPrimaryDark"
    app:itemTextColor="@color/colorAccent"
    app:menu="@menu/bottom_navigation"/>

</android.support.constraint.ConstraintLayout>

好的,我假设
R.id.container
在mainactivity.java中 由于此managegivenfragment无法访问它,因此找不到任何视图

this.childFragmentManager?.beginTransaction()?.replace(R.id.container, manageGivenTaskDetailsFragment)?.commit()
R.id.container
替换为以下内容

getActivity().findViewById(R.id.container).getId()

如果上述方法无效,请发布mainactivity代码。

好的,因此我假设
R.id.container
位于mainactivity.java中 由于此managegivenfragment无法访问它,因此找不到任何视图

this.childFragmentManager?.beginTransaction()?.replace(R.id.container, manageGivenTaskDetailsFragment)?.commit()
R.id.container
替换为以下内容

getActivity().findViewById(R.id.container).getId()

如果上述操作不起作用,请发布您的主活动代码。

这可能是因为在活动布局初始化之前,即在android中创建活动后,您试图访问片段的视图,那么只有我们才能访问其片段布局。因此,只需从onCreateView()中删除代码并将其复制到onActivityCreated(),如下所示

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
     //make variable 'view' to global and access it
     tabLayout = view.findViewById(R.id.manage_tasks_tab_layout)
     viewPager = view.findViewById(R.id.manage_tasks_view_pager)
}

这可能是因为您试图访问片段的视图,在活动布局初始化之前,即在android中,一旦创建了活动,那么只有我们才能访问其片段布局。因此,只需从onCreateView()中删除代码并将其复制到onActivityCreated(),如下所示

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
     //make variable 'view' to global and access it
     tabLayout = view.findViewById(R.id.manage_tasks_tab_layout)
     viewPager = view.findViewById(R.id.manage_tasks_view_pager)
}

您不能仅从此片段调用活动,请替换

this.childFragmentManager

因此,你应该:

activity?.supportFragmentManager?.beginTransaction()?.replace(R.id.container, manageGivenTaskDetailsFragment)?.addToBackStack(null)?.commit()

这应该可以工作。

您不能仅从该片段调用活动,请替换

this.childFragmentManager

因此,你应该:

activity?.supportFragmentManager?.beginTransaction()?.replace(R.id.container, manageGivenTaskDetailsFragment)?.addToBackStack(null)?.commit()


这应该是可行的。

发布您的XML,用于
ManageGivenFragment
FrameLayout
中的
ManageGivenFragment
中定义了容器的id。container@ManojPatidar你是什么意思?如何操作?@mducc在activity_main.XML中发布您的
ManageGivenFragment
的XML。在
ManageGivenFragment
FrameLayout
中定义了容器的id。container@ManojPatidar你是什么意思?如何操作?@mducc在activity_main.xml中为什么要使用片段进行详细查看??(即,将ManageGivenDetailsFragment设置为活动而不是片段),因此对于后面的导航会更好。或者代替此。childFragmentManager?.beginTransaction()?。。。尝试getActivity.getFragmentManager().beginTransaction()…为什么要使用片段来查看详细信息??(即,将ManageGivenDetailsFragment作为活动而不是片段),以便更好地进行反向导航。或者代替此。childFragmentManager?.beginTransaction()?。。。尝试getActivity.getFragmentManager().beginTransaction()…请回答这个问题。R.layout.mainActivity文件中有R.id.container,对吗?如果是,则无法使用R.id从片段中访问父活动XML元素。请参阅上面的_元素答案,我们可以讨论如何解决此问题。是的,容器位于main_activity.XML中,因此请发布最后一件事,请发布main_activity.XML。我认为这应该可行(但如果我有XML文件,我会更确定)顺便说一句,我精通java,因此您必须将代码格式化为kotlin,尽管逻辑将完全相同,因为Google确保java和kotlin具有相同的逻辑,但语法不同?.replace(containerID,manageGivenTaskDetailsFragment)?.commit()嘿,我这么做了,但是我又得到了null,我现在定义的这个值容器是null,所以我无法访问它的id。我已经添加了我的mainActivity的布局。请回答这个问题。你在R.layout.mainActivity文件中有R.id.container,对吗?如果是,则无法使用R.id从片段中访问父活动XML元素。请参阅上面的_元素答案,我们可以讨论如何解决此问题。是的,容器位于main_activity.XML中,因此请发布最后一件事,请发布main_activity.XML。我认为这应该可行(但如果我有XML文件,我会更确定)顺便说一句,我精通java,因此您必须将代码格式化为kotlin,尽管逻辑将完全相同,因为Google确保java和kotlin具有相同的逻辑,但语法不同?.replace(containerID,manageGivenTaskDetailsFragment)?.commit()嘿,我这么做了,但是我又得到了null,我现在定义的这个值容器是null,所以我无法访问它的id。我已经添加了我的mainActivity的布局。