新手來了!我很難學習碎片的生命周期,我被這個問題困住了。如果我在 emu 上運行它,片段會顯示在活動中,但片段內的按鈕需要單擊兩次才能運行目標活動。
片段設定.kt:
class FragmentSetting : Fragment(), View.OnClickListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view: View = inflater!!.inflate(R.layout.fragment_main_setting, container, false)
val btnLogout: Button = view.findViewById(R.id.btn_logout)
val btnArticle: Button = view.findViewById(R.id.btn_art)
btnLogout.setOnClickListener(this)
btnArticle.setOnClickListener(this)
return view
}
companion object {
fun newInstance(): FragmentSetting {
return FragmentSetting()
}
}
override fun onClick(v: View?) {
when (v?.id) {
R.id.btn_logout -> {
btn_logout.setOnClickListener {
Toast.makeText(getContext(), "Signed Out.", Toast.LENGTH_SHORT).show()
FirebaseAuth.getInstance().signOut()
val intent = Intent(activity, SignInActivity::class.java)
startActivity(intent)
}
}
R.id.btn_art -> {
btn_art.setOnClickListener {
Toast.makeText(getContext(), "Hello World", Toast.LENGTH_SHORT).show()
val intent = Intent(activity, ArticleActivity::class.java)
startActivity(intent)
}
}
}
}
}
uj5u.com熱心網友回復:
創建視圖時,您將 Fragment 類本身設定為兩個按鈕的偵聽器。那將是一個可以接受的地方。
但是,您的偵聽器功能不會執行您想要的按鈕操作。相反,它為每個按鈕設定一個新的偵聽器。所以當他們第一次被點擊時,他們會得到他們的新聽眾。只有在那個內部次要偵聽器中,您才能進入另一個活動,這就是為什么要點擊兩次。
您需要直接執行您的操作,而不是將操作包裝在設定另一個偵聽器中。順便說一下,傳遞給單擊偵聽器的視圖永遠不會為空,因此您可以洗掉?'s。
override fun onClick(v: View) {
when (v.id) {
R.id.btn_logout -> {
Toast.makeText(getContext(), "Signed Out.", Toast.LENGTH_SHORT).show()
FirebaseAuth.getInstance().signOut()
val intent = Intent(activity, SignInActivity::class.java)
startActivity(intent)
}
R.id.btn_art -> {
Toast.makeText(getContext(), "Hello World", Toast.LENGTH_SHORT).show()
val intent = Intent(activity, ArticleActivity::class.java)
startActivity(intent)
}
}
}
uj5u.com熱心網友回復:
如果您實作 View.OnClickListener 介面,那么第一件事有兩個不同的事情,所以您大膽地使用 onclick 回呼方法,每次單擊時它們都會觸發,這意味著在 onclick 方法中執行片段代碼寫入 onclick 方法,因此首先在當前代碼中單擊它們將設定 setOnclicklistener,然后下次單擊時它將按預期作業。
很簡單,你直接用花括號執行代碼不需要設定setOnClickListener。例如 :
R.id.btn_art -> { Toast.makeText(getContext(), "Hello World", Toast.LENGTH_SHORT).show() val intent = Intent(activity, ArticleActivity::class.java) startActivity(intent) }
第二件事是你在你的 onCreateView 中設定了 setOnClickOnClickListenre 并且沒有實作 clicklistenere。例如:
btn_logout.setOnClickListener { Toast.makeText(getContext(), "Signed Out.", Toast.LENGTH_SHORT).show() FirebaseAuth.getInstance().signOut() val intent = Intent(activity, SignInActivity::class.java) startActivity (意圖)}
但是他們的最佳實踐是您可以根據視圖架構在 onclick 方法中處理單擊偵聽器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/376866.html
標籤:安卓 科特林 android-fragments 点击监听器 双击
