Android 安卓按钮碎片不被触发
为什么碎片中的按钮不能被触发?我已经在这上面花了大约5个小时,但是不会触发onClick/onFocusListener 编辑:代码 因此,此片段位于我的主要活动的ViewPager2上,并且 它只是不会触发任何回调方法。我也尝试过,但这些onClick初始化无处不在 片段:Android 安卓按钮碎片不被触发,android,Android,为什么碎片中的按钮不能被触发?我已经在这上面花了大约5个小时,但是不会触发onClick/onFocusListener 编辑:代码 因此,此片段位于我的主要活动的ViewPager2上,并且 它只是不会触发任何回调方法。我也尝试过,但这些onClick初始化无处不在 片段: class SearchFragment : Fragment() { private lateinit var searchBinding: FragmentSearchBinding override fun on
class SearchFragment : Fragment() {
private lateinit var searchBinding: FragmentSearchBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
searchBinding = FragmentSearchBinding.inflate(layoutInflater)
interface OnSearch {
fun onArticleSelected(position: Int)
}
}
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 onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
var test = activity?.findViewById<TabLayout>(R.id.tab_layout)
searchBinding.searchBar.setOnFocusChangeListener{view, hasFocus ->
if (hasFocus){
if (test != null) {
test.isVisible = false
}
Log.d("SearchFragment", "onFocus")
}else{
if (test != null) {
test.isVisible = true
}
}
}
}
}
class SearchFragment:Fragment(){
私有lateinit var searchBinding:FragmentSearchBinding
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
searchBinding=碎片searchBinding.充气(放平)
界面搜索{
已选择角色的乐趣(位置:Int)
}
}
覆盖创建视图(
充气器:布局充气器,容器:视图组?,
savedInstanceState:捆绑?
):查看{
//为该碎片膨胀布局
返回充气机。充气(R.layout.fragment\u搜索,容器,错误)
}
覆盖已创建的视图(视图:视图,保存状态:捆绑?){
super.onViewCreated(视图,savedInstanceState)
var测试=活动?.findViewById(R.id.tab\U布局)
searchBinding.searchBar.setOnFocusChangeListener{view,hasFocus->
如果(hasFocus){
如果(测试!=null){
test.isVisible=false
}
Log.d(“SearchFragment”、“onFocus”)
}否则{
如果(测试!=null){
test.isVisible=true
}
}
}
}
}
XML:
试试这样的方法
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?) {
super.onCreateView(view, savedInstanceState)
val binding = FragmentSearchBinding.inflate(inflater, container, false);
val view = binding.root
// Set binding
return view;
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
view.findViewById(R.id.searchBar).setOnFocusChangeListener { view, hasFocus ->
}
}
试试这样的
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?) {
super.onCreateView(view, savedInstanceState)
val binding = FragmentSearchBinding.inflate(inflater, container, false);
val view = binding.root
// Set binding
return view;
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
view.findViewById(R.id.searchBar).setOnFocusChangeListener { view, hasFocus ->
}
}
你能展示你的代码吗?fragment和Xml代码在这里您提供的代码片段中没有按钮…您能显示您的代码吗?fragment和xmlHere you go the code在您提供的片段代码中没有按钮…FragmentSearchBinding没有使用这些参数膨胀的方法,onViewCreated在onCreateView之前被调用,这将导致运行时错误抱歉,我犯了一些错误。更新谢谢你,Log.d终于显示出来了。两个问题:我的错误是什么?你所说的//Set binding是什么意思?我的意思是你可以在这里设置viewModel需要的变量,如果有
binding.setVariable(BR.vm,mVm)
。你的错误是你的片段没有意识到你膨胀的视图。FragmentSearchBinding没有使用这些参数膨胀的方法,并且onViewCreated在onCreateView之前被调用,这会导致运行时错误抱歉,我犯了一些错误。更新谢谢你,Log.d终于显示出来了。两个问题:我的错误是什么?你所说的//Set binding是什么意思?我的意思是你可以在这里设置viewModel需要的变量,如果有binding.setVariable(BR.vm,mVm)
。你的错误是你的碎片没有意识到你膨胀的观点。