2011-11-14 14 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()); 
       } 
      } 
     }; 
    } 

iはクリックハンドラを返していませんでしたが判明しました。彼らは他の言語で少し違う仕事をしていました。

もし私がそうしたとしたら、私が働いていたクラスを変更することはできませんが、クリックハンドラへの最終参照を渡すだけでよいと思いました。

希望は、これは私は、問題は、あなたが方法onButtonClick、無効onClickListenerにnullを返すということだと思う誰か

答えて

2

に役立ちます。

+0

ああ..はい。それは理にかなっている。しかし、私が方法を返したら、それは私が働こうとしているクラスから私を壊します。どうすればそれを回避できますか? –

+0

私はそれを仕事にしました。ありがとう! –

関連する問題