我知道這個問題已經被問過很多次了,但只是想更清楚一些。
所以我想用一個按鈕創建一個簡單的片段,單擊該按鈕應該改變片段 - 非常簡單和基本的一個。
因此我創建了一個函式,并在 onCreateView 上呼叫它。什么都沒發生。
然后我在 onCreateView 之后創建了 onViewCreated 并在其中呼叫了相同的函式。
有效。
我的問題是究竟是什么使它起作用?
這是代碼
class homeFragment : Fragment() {
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)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
hello()
}
fun hello()
{
val button = view?.findViewById<Button>(R.id.button_login)
button?.setOnClickListener{
val action = homeFragmentDirections.actionHomeFragmentToLoginFragment()
findNavController().navigate(action)
Toast.makeText(context,"wao",Toast.LENGTH_LONG).show()
}
}
}
uj5u.com熱心網友回復:
根據您的評論,您做了這樣的事情:
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_home, container, false)
hello() // the method has already returned a View, so this call is never reached.
}
因此,當您在 return 陳述句之后呼叫hello()該方法時onCreateView,由于 return 陳述句
,該方法無效。
由于onViewCreated在 之后呼叫onCreateView,因此您的函式中不再存在
基礎。Viewnullhello
如果您仍然想使用onCreateView,您可以執行以下操作:
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val fragmentView = inflater.inflate(R.layout.fragment_home, container, false)
hello(fragmentView)
return fragmentView
}
fun hello(buttonHolderView: View?) {
val button = buttonHolderView?.findViewById<Button>(R.id.button_login)
button?.setOnClickListener {
val action = homeFragmentDirections.actionHomeFragmentToLoginFragment()
findNavController().navigate(action)
Toast.makeText(context, "wao", Toast.LENGTH_LONG).show()
}
}
uj5u.com熱心網友回復:
您需要在呼叫函式之前對視圖進行膨脹:
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val fragmentHome = inflater.inflate(R.layout.fragment_home, container, false)
hello(fragmentHome)
return fragmentHome;
}
更改您的 hello 功能:
fun hello(view: View)
{
....
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/495712.html
上一篇:向表格單元格添加描述
