ImageButton OnClickListener不会被触发

时间:2011-11-14 01:20:15

标签: android onclick imagebutton

我已经相当困惑了几天了。

几天前,我开始尝试扩展TableLayout视图以使其可折叠。这听起来很直接。

问题:

protected void onFinishInflate()
{
    super.onFinishInflate();

    ImageButton ib = (ImageButton) this.findViewById(R.id.collapse);
    // totally gayed
    ib.setOnClickListener(this.onButtonClick(ib));
}

//works
public OnClickListener onButtonClick(ImageButton ib) {
    try {
        if (this.collapsed)
        {
            this.Build();
            ib.setImageResource(android.R.drawable.arrow_up_float);
        } else {
            this.Collapse();
            ib.setImageResource(android.R.drawable.arrow_down_float);
        }
    } catch (Exception e) {
        Log.e("MTK", e.toString() + " : " + e.getMessage() + " : " + e.getCause());
    }
    return null;
}

所以有趣的是,除了标题之外,表格将打开所有行。实例化视图时会触发onClick方法(好吧..?)。

但之后我什么都没得到,我真的不知道问题是什么。我尝试了很多东西。

解决方案:

public View.OnClickListener onButtonClick(final CollapsibleTableLayout tbl, final ImageButton ib) {
        return new View.OnClickListener() { 
            public void onClick(View v) {
                try {
                    if (tbl.collapsed == true)
                    {
                        tbl.Build();
                        tbl.collapsed = false;
                        ib.setImageResource(android.R.drawable.arrow_up_float);
                    } else {
                        tbl.Collapse();
                        tbl.collapsed = true;
                        ib.setImageResource(android.R.drawable.arrow_down_float);
                    }
                } catch (Exception e) {
                    Log.e("MTK", e.toString() + " : " + e.getMessage() + " : " + e.getCause());
                }
            }
        };
    }

结果我没有返回点击处理程序。习惯了他们在其他语言上的工作方式略有不同。

我想如果我这样做,我就无法修改我正在使用的类,但你必须将最终引用传递给click处理程序。

希望这有助于某人

1 个答案:

答案 0 :(得分:2)

我认为问题是你在方法onButtonClick中返回null,而不是有效的onClickListener。