我是Android开发的新手,我不懂东西,即使这很简单:我有一个ListView,每个项目都包含一个textview和一个按钮。单击按钮时,它会在getView方法中触发setOnClickListener。此外,我在此ListView上有一个setOnItemClickListener适配器,但单击标签时该方法不会触发。为什么会这样?
更新
这是按钮点击的方式:
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();
}
});
答案 0 :(得分:1)
这是每个新手都遭受的View焦点问题;)
简单的解决方案:
让 row_layout
的所有孩子
focusable=false
,focusableInTouchMode = false
和将android:descendantFocusability="blocksDescendants"
添加到您的父级。
答案 1 :(得分:0)
根据您的要求使用focusable或requestfocus()。
答案 2 :(得分:0)
在您定义按钮的xml文件中添加:
android:focusable="false"
答案 3 :(得分:0)
您可以在Adapter类中覆盖onClick
方法,并检查单击了哪个视图。
@Override
public void onClick(View v) {
if (v.getId() == R.id.button)
mButtonListener.buttonOnClick();
else
mItemListener.itemOnClick();
}
mButtonListener
和mItemListener
是在构造函数中传递给Adapter的侦听器。
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();
}
中使用了这个