找不到ID为0x7f080032的片段的视图

时间:2018-08-14 09:31:26

标签: android android-fragments kotlin

嗨,我为找到解决方案付出了很多努力,并尝试了许多不同的解决方案(在Java中),但没有一个对我有用,我的方法也与已经在{{1 }},这就是为什么我不得不再次问这个问题。

我会尽力解释一下我在做什么, 我有一个Stackoverflow,其中一个MainActivity包含5个BottomNavigationView

在其中一个(Fragments中,我有一个ManageTasksFragment,它有2个标签页(两个子片段)ViewPagerManageGivenFragment,到目前为止,一切都很好。

  

ManageTasksFragment.kt

ManageDoingFragment

现在,我有一个名为private lateinit var tabLayout: TabLayout private lateinit var viewPager: ViewPager override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater.inflate(R.layout.fragment_manage_tasks, container, false) //val indicator = view.findViewById(R.id.tpi_header) as TabPageIndicator tabLayout = view.findViewById(R.id.manage_tasks_tab_layout) viewPager = view.findViewById(R.id.manage_tasks_view_pager) return view } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val sectionPageAdapter = SectionPageAdapter(childFragmentManager) // Adding Fragments sectionPageAdapter.addFragment(ManageGivenFragment(), "Given") sectionPageAdapter.addFragment(ManageDoingFragment(), "Doing") //adapter Setup viewPager.adapter = sectionPageAdapter tabLayout.setupWithViewPager(viewPager) } 的新片段,它应该是ManageGivenDetailsFragment的子片段,但是当我尝试替换该片段时,应用程序崩溃了,并且出现了错误

ManageGivenFragment
  

ManageGivenFragment.kt

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

在上面的代码中,我同时尝试了override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val tasksArray = DataViewModel.instance.dataSource //val openTasksArray = removeDoneTasks(tasksArray) val recyclerView = view.findViewById<RecyclerView>(R.id.manage_given_tasks_recyclerView) recyclerView.layoutManager = LinearLayoutManager(activity, LinearLayout.VERTICAL, false) adapter = ManageGivenTasksAdapter(tasksArray, context!!) { item -> val manageGivenTaskDetailsFragment = ManageGivenDetailsFragment() //manageGivenTaskDetailsFragment.selectedTask = item //fragmentManager?.beginTransaction()?.replace(R.id.container, manageGivenTaskDetailsFragment)?.addToBackStack(null)?.commit() this.childFragmentManager?.beginTransaction()?.replace(R.id.container, manageGivenTaskDetailsFragment)?.commit() } recyclerView.adapter = adapter } fragmentManager

ManageGivenDetailsFragment.kt

childFragmentManager

在上面的代码中,我尝试将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的{​​{1}},因为有人建议将其更改为root,但仍然没有不行。

如果您需要更多特定部分的代码,请告诉我,我们很高兴获得您的帮助。

更新

  

MainActivity.kt

inflater

更新2

activity_main.xml

null

3 个答案:

答案 0 :(得分:1)

好的,所以我假设R.id.container在mainactivity.java中 由于此管理分区无法到达,因此找不到任何视图。

this.childFragmentManager?.beginTransaction()?.replace(R.id.container, manageGivenTaskDetailsFragment)?.commit()

R.id.container替换为下面的

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

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

答案 1 :(得分:1)

您不能只是从此Fragment调用活动,而是替换

this.childFragmentManager

使用

activity?.supportFragmentManager

所以您应该拥有:

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

这应该有效。

答案 2 :(得分:0)

可能是因为您在活动布局初始化之前尝试访问片段的视图,即在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)
}