2011-11-14 202 views
1

我已经很困惑了几天了。ImageButton OnClickListener没有被解雇

几天前,我开始尝试扩展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()); 
       } 
      } 
     }; 
    } 

原来我不返回单击处理程序。习惯于他们在其他语言中工作有点不同。

我想如果我这样做了,我wouldnt能够修改我正在工作的类,但你只需要通过最终引用到点击处理程序。

希望这可以帮助别人

回答

2

我认为这个问题是您在方法onButtonClick,不是一个有效的onClickListener返回null。

+0

哦..是的。这就说得通了。但是如果我返回一种方法,那么它会使我离开我正在努力工作的课程。我该如何解决这个问题? –

+0

我做了它的工作。谢谢! –