我已经相当困惑了几天了。
几天前,我开始尝试扩展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处理程序。
希望这有助于某人
答案 0 :(得分:2)
我认为问题是你在方法onButtonClick中返回null,而不是有效的onClickListener。