2011-11-14 401 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

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