如果item具有带onClick的按钮,则Android ListView setOnItemClickListener无法正常工作

时间:2017-11-21 10:53:59

标签: android listview

我是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();
                }
            });

4 个答案:

答案 0 :(得分:1)

这是每个新手都遭受的View焦点问题;)

简单的解决方案:

row_layout的所有孩子 focusable=falsefocusableInTouchMode = 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();
    }

mButtonListenermItemListener是在构造函数中传递给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();
}

我在Inventory App you can find source code here

中使用了这个