当前位置: 首页 > 知识库问答 >
问题:

为什么我的应用程序找不到片段的视图?

湛功
2023-03-14

我正在用静态编程语言制作一个应用程序,我试图将我的主要活动(ScuterSharingActive)的内容放入一个片段中。构建成功,但我的程序崩溃了,我在LogCat中遇到了以下错误

    Process: dk.moapd.scootersharing, PID: 8292
    java.lang.IllegalArgumentException: No view found for id 0x7f0800c6 (dk.moapd.scootersharing:id/fragment_container_view_tag) for fragment ScooterSharingFragment{92ed9ba} (def2f41e-5fd6-4855-a554-90398882b654 id=0x7f0800c6)

有人知道会是什么吗?

这是xml文件fragment_scooter_sharing.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".ScooterSharingFragment">

    <View
        android:layout_width="match_parent"
        android:layout_height="20dp"/>
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/scooter_title"/>
    <!-- Button to add rides-->
    <Button
        android:id="@+id/start_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="@string/start_button" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/edit_button"
        android:layout_gravity="center"
        android:text="@string/edit_button"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/list_button"
        android:layout_gravity="center"
        android:text="@string/list_button"/>
    <ListView
        android:id="@+id/rides_list_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

还有滑板车ragment.kt课

package dk.moapd.scootersharing

import ...

private const val TAG = "ScooterSharingFragment"
/**
 * A simple [Fragment] subclass.
 * Use the [ScooterSharingFragment.newInstance] factory method to
 * create an instance of this fragment.
 */
class ScooterSharingFragment : Fragment() {

        //View binding for ScooterSharingActivity
        private lateinit var binding : FragmentScooterSharingBinding

        private lateinit var adapter : ScooterArrayAdapter
        private lateinit var titleField : EditText
        private lateinit var startButton : Button
        private lateinit var editButton : Button
        private lateinit var listButton : Button
        private lateinit var scooterList : ListView

        //  A set of static attributes used in this activity class.
        companion object {
            lateinit var ridesDB : RidesDB
            private lateinit var adapter : ScooterArrayAdapter
        }

        override fun onCreateView(
            inflater: LayoutInflater,
            container: ViewGroup?,
            savedInstanceState: Bundle?
        ): View? {
            val view = inflater.inflate(R.layout.fragment_scooter_sharing, container, false)
            titleField = view.findViewById(R.id.scooter_title) as EditText
            startButton = view.findViewById(R.id.start_button) as Button
            editButton = view.findViewById(R.id.edit_button) as Button
            listButton = view.findViewById(R.id.list_button) as Button
            scooterList = view.findViewById(R.id.rides_list_view) as ListView


            //Singleton to share an object between activites
            ScooterSharingActivity.ridesDB = RidesDB.get(requireContext())
            val rides = ScooterSharingActivity.ridesDB.getScooters()

            ScooterSharingFragment.adapter = ScooterArrayAdapter(requireContext(), R.layout.list_rides, rides)

            with(binding){
                //Start button
                startButton.setOnClickListener{
                    //Start the application
                    Log.d(TAG, "StartRide called")
                    val intent = Intent(requireContext(), StartRideActivity::class.java) //Change baseContext to requireContext later
                    startActivity(intent)
                }
                //Edit button
                editButton.setOnClickListener{
                    //Edit ride
                    Log.d(TAG, "EditRide called")
                    val intent = Intent(requireContext(), EditRideActivity::class.java)
                    startActivity(intent)
                }
                //List button
                listButton.setOnClickListener{
                    ridesListView.adapter = ScooterSharingFragment.adapter
                }
            }

            return view
            }
        }

共有1个答案

刘野
2023-03-14

试着这样设置你的片段:

class MyFragment : Fragment() {
    private var _binding: FragmentMyBinding? = null
    private val binding get() = _binding!!

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        _binding = FragmentMyBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        
        // Access your views in xml like this:
        binding.editButton.setOnClickListener {
            // Your code
        }

    }

}

还要确保在build中添加这一行。用于视图绑定的渐变:

buildFeatures {
    viewBinding = true
}
 类似资料:
  • 我一整天都被困在这个问题上,我似乎找不到一个适合我的情况的答案,足以让我使用。 当我单击一个列表项时,比如Blue,在Portraint中,我希望它显示一个新的片段,这是一个蓝色的屏幕,而在Sandwork中,它在半个屏幕上显示该片段,在另一个屏幕上显示listview。我正在使用ActionBarSherlock和碎片来完成这一点。 我从里到外构建了它,所以我从一个列表开始,它按照我想要的方式工

  • 问题内容: 我正在尝试打开一个保存在源文件夹本身中的CSV文件名“ logger.csv”。 但是,这一直在给我一个“找不到文件”错误。 问题答案: 如果您现在就使用相对路径,则该文件需要存在于项目根目录中, 而不是 存在于java文件的目录中。 考虑以下层次结构: 不管用。 将 现在 的工作。(注意,该文件与src目录相邻。)

  • 问题内容: 我有一个活动,其中包含一个片段,在该片段中有一个按钮,当单击它时,会弹出一个对话框。 在此对话框中,有一个Viewpager,其中包含一些要显示的片段。 这是代码和错误,请您花宝贵的时间告诉我我哪里错了。非常感谢您的帮助。 MainActivity.class MyFragment.class PagerDialog.class 这是dialog.xml: 这是错误 问题答案: 我找到

  • 自从我将IntelliJ升级到Ultimate 2019.2之后,我突然开始出现以下问题: null 我是通过单击主函数上的play按钮来运行这个。我不得不将目录注释为sources目录和test sources。我重新进口了我的Gradle.Build。我试着重建项目,但它也找不到我的源项目中的项目。 我还尝试使缓存无效并重新启动。没有变化。 我想不出还有什么可以尝试的。

  • 我花了一小段时间试图研究片段和活动之间的差异,但没有找到任何结论。这条线程似乎建议片段是片段,而片段活动天生比活动快? 它可能是相关的,使平板版本的应用程序在未来,在这种情况下,我认为碎片将是有用的,但B)是一个主要的头痛从活动重新设计到使用碎片代替? C)当使用片段时,你可以让屏幕-a作为你的主要活动,屏幕-B作为你的片段-#1,或者你必须让两个屏幕作为一个片段,主活动作为父。

  • 我正在使用Reverfit2,我试图从我用Python制作的Web服务中请求一些数据。 实际上,它抛出了一个“java.lang.IllegalStateException”,但是当我调用GET方法时,API返回代码200,而且我还可以看到用于调试响应JSON的打印版本。问题是Call方法,因为它总是在failure时执行。 求求你,救命! 这是我的(简单的)Python Web服务,API-Pr