gpt4 book ai didi

android - 如何在 fragment 中实现OnClick和OnFocusChanged监听器

转载 作者:行者123 更新时间:2023-12-02 13:43:58 24 4
gpt4 key购买 nike

我有一个MainActivityViewPager2FragmentStateAdapter。在这个ViewPager中,我有5种不同布局的Fragments。我正在尝试在所说的EditTexts上实现一些ButtonsFragments。但是,没有任何侦听器触发器。
调试时,将执行onCreate中的所有代码,但永远不会触发监听器。

这是我的片段:

class SearchFragment : Fragment() {


private lateinit var searchBinding: FragmentSearchBinding

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
searchBinding = FragmentSearchBinding.inflate(layoutInflater)



var test = activity?.findViewById<TabLayout>(R.id.tab_layout)

searchBinding.testButton.setOnClickListener{
v -> Toast.makeText(context,"This is a test",Toast.LENGTH_SHORT).show()
}

searchBinding.searchBar.setOnFocusChangeListener{view, hasFocus ->
if (hasFocus){
if (test != null) {
test.isVisible = false
}
Log.d("SearchFragment", "onFocus")
}else{
if (test != null) {
test.isVisible = true
}
}

}

}

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


}

override fun onClick(v: View) {
when (v.id) {
R.id.search_bar -> {
Toast.makeText(v.context, "This is a test", Toast.LENGTH_SHORT)
}
}
}

}

这是我的ViewPager适配器:
private const val NUM_PAGES = 5


class ViewPagerFragmentAdapter(fragmentActivity: FragmentActivity) : FragmentStateAdapter (
fragmentActivity
)
{



override fun getItemCount(): Int {
return NUM_PAGES
}

override fun createFragment(position: Int): Fragment {
when (position) {
0 -> return RankingFragment()
1 -> return RateFragment()
2 -> return ProfileFragment()
3 -> return SearchFragment()
4 -> return ChatFragment()
}
return ProfileFragment()
}

}

最佳答案

我认为您需要阅读有关片段的生命周期的信息。处理View的生命周期部分介于onCreateViewonDestroyView之间。 onCreate在此之前发生。 Check out the guide from Android

另外,我对ViewBinding的经验也不多,但是我认为您做的不正确。

根据documentation,您应该按照以下方式进行操作:

class SearchFragment : Fragment() {


private var _binding: FragmentSearchBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val searchBinding get() = _binding!!

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentSearchBinding.inflate(inflater, container, false)
val view = searchBinding.root

var test = activity?.findViewById<TabLayout>(R.id.tab_layout)

searchBinding.testButton.setOnClickListener{
v -> Toast.makeText(context,"This is a test",Toast.LENGTH_SHORT).show()
}

searchBinding.searchBar.setOnFocusChangeListener{view, hasFocus ->
if (hasFocus){
if (test != null) {
test.isVisible = false
}
Log.d("SearchFragment", "onFocus")
}else{
if (test != null) {
test.isVisible = true
}
}

}

return view
}

override fun onDestroyView() {
_binding = null
}

}

关于android - 如何在 fragment 中实现OnClick和OnFocusChanged监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60797589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com