首页 > 解决方案 > 为什么 onClickListener 在我的片段活动中不起作用?

问题描述

我是编程新手,在我的 FragmentHome.kt 中添加 onClickListener 时遇到了困难

我将此代码添加到我现有的活动中:

val exc  = this.findViewById<Button>(R.id.execute)
    exc.setOnClickListener {
        Toast.makeText(this, "You clicked me.", Toast.LENGTH_SHORT).show()
    }

我尝试在一个空白活动上设置 onClicklistener 并且它有效,但是当我将它添加到现有的 Fragment 活动时它什么也不做(它应该显示带有一些文本的 toast)我没有看到错误消息,所以我不知道问题可能出在哪里是。

谢谢你的回复。

enter code here
public class FragmentHome : Fragment() {


public class HomeFragmentElements : AppCompatActivity() {

    private lateinit var spinView: Spinner


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.fragment_home)


        val exc  = this.findViewById<Button>(R.id.execute)
        exc.setOnClickListener {
            Toast.makeText(this, "You clicked me.", Toast.LENGTH_SHORT).show()
        }
        
        

        spinView = findViewById(R.id.spinner)
        spinView.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            override fun onItemSelected(
                parent: AdapterView<*>?,
                view: View?,
                position: Int,
                id: Long
            ) {
                TODO("Not yet implemented")
            }

            override fun onNothingSelected(parent: AdapterView<*>?) {
                TODO("Not yet implemented")
            }

        }


    }
}

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_home, container, false)


    }


}
enter code here

标签: kotlinonclicklistener

解决方案


尝试将您的代码放入“onViewCreated”:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    val exc  = this.findViewById<Button>(R.id.execute)
    exc.setOnClickListener {
        Toast.makeText(this, "You clicked me.", Toast.LENGTH_SHORT).show()
    }
}

onViewCreated 在“onCreateView”之后执行。视图绑定和初始化应该进入 onViewCreated


推荐阅读