如果项具有带有onClick的按钮,则Android ListView setOnItemClickListener不工作
我是Android开发的新手,我不了解一些东西,即使是一件简单的事情:我有一个列表视图,每个项目都包含一个文本视图和一个按钮。当单击按钮时,它在getView方法内激发setOnClickListener。此外,我在这个ListView上有一个setOnItemClickListener适配器,但是当单击标签时,该方法不会触发。为什么会这样 更新 以下是单击按钮的方式:如果项具有带有onClick的按钮,则Android ListView setOnItemClickListener不工作,android,listview,Android,Listview,我是Android开发的新手,我不了解一些东西,即使是一件简单的事情:我有一个列表视图,每个项目都包含一个文本视图和一个按钮。当单击按钮时,它在getView方法内激发setOnClickListener。此外,我在这个ListView上有一个setOnItemClickListener适配器,但是当单击标签时,该方法不会触发。为什么会这样 更新 以下是单击按钮的方式: ImageButton btnToMap = view.findViewById(R.id.btnToMap);
ImageButton btnToMap = view.findViewById(R.id.btnToMap);
btnToMap.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Coordinates coordinate = MainActivity.coordinates.get(position);
Toast.makeText(getApplicationContext(), "coordonata apasata: " + coordinate.latitude + ";"
+ coordinate.longitude, Toast.LENGTH_SHORT).show();
}
});
根据需要使用focusable或requestfocus()。在定义按钮的xml文件中添加:
android:focusable="false"
您可以在适配器类中重写
onClick
方法,并检查单击了哪个视图
@Override
public void onClick(View v) {
if (v.getId() == R.id.button)
mButtonListener.buttonOnClick();
else
mItemListener.itemOnClick();
}
mButtonListener
和mItemListener
是传递给构造函数中适配器的侦听器
private final OnButtonListener mButtonListener;
private final OnItemListener mItemListener;
public MyAdapter(OnButtonListener buttonListener, OnItemListener itemListener) {
mButtonListener = buttonListener;
mItemListener = itemListener;
}
public interface OnButtonListener {
void buttonOnClick();
}
public interface OnItemListener {
void itemOnClick();
}
我在我的中使用了这个,这是一种每个新手都会遇到的视图焦点问题;) 简单解决方案: 将
行布局的所有子项设置为
focusableInTouchMode=false
,focusableInTouchMode=false
和将android:genderantfocusability=“blocksDescendants”
添加到您的父项中将focusableInTouchMode=false
和focusableInTouchMode=false
添加到按钮中!!为什么会发生这种情况?因为,按钮正在获得您的行的焦点,这导致不会触发onimclick()
我已更新了我的问题,使您的行布局的所有子项都成为focusable=false
,focusableInTouchMode=false
,并添加android:generationfocusability=“BlocksDescents”
发送给您的家长。