2013-12-15 53 views

回答

0

是的。你的活動必須

implements OnClicklistener 

,並有方法

public void onClick(DialogInterface di, int which) { 

} 

那麼你可以

button.setOnClickListener(this); 

只要點擊任何按鈕(如果您已設置this爲收聽的onclick方法會被調用)。 int which參數是按鈕按下的ID。

編輯:我覺得我得到了你的問題錯了: -/

0

是其可能的。這個想法是:

  • 您可以在該Activity中定義一個接口。例如:

    public interface listener {public void method(Activity activity); }

  • 在你的活動中,你應該公開一個註冊監聽器的註冊方法。

    public void setListener(Listener listener) this.listener = listener; }

  • 無論何時出現任何Button按鈕/點擊事件,都需要從Activity中調用接口方法。

    exampleButton.setOnClickListener(新View.OnClickListener(){

     @Override 
         public void onClick(View arg0) { 
               listener.listenToButton(this); 
            } 
    
  • 現在,任何一個類實現監聽器接口必須實現listenToButton(Activity activity)方法和這種方式,他們會在任何按鈕獲得參考活動按(或點擊)事件

1

是的,這是可能的。你必須要找到你所有的按鈕,並設置其onClickListeners以相同的監聽器。要麼你可以讓你的活動實施View.OnClickListener或喲你可以通過實現它來創建一個監聽器對象。

瞭解您的活動的根佈局,您可以通過getChildAt(index)訪問子視圖。當然,你應該檢查一下孩子是否是Button

例如在onCreate你可以做到這一點:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // a layout is a ViewGroup 
    ViewGroup mainLayout = (ViewGroup) findViewById(R.id.main_layout); 
    for (int i = 0; i < viewGroup.getChildCount(); i++) { 
     if (view instanceof Button) { 
      view.setOnClickListener(listener); 
     } 
    } 
} 

這裏的關鍵是要找到,即使他們是子佈局的孩子的所有按鈕。爲了這個目的,你必須寫一個像這樣的遞歸函數:

private void setListenerToAllButtons(ViewGroup viewGroup, View.OnClickListener listener) { 

    for (int i = 0; i < viewGroup.getChildCount(); i++) { 
     View view = viewGroup.getChildAt(i); 
     if (view instanceof ViewGroup) { 
      ViewGroup group = (ViewGroup) view; 
      setListenerToAllButtons(group, listener); 
     } else if (view instanceof Button) { 
      view.setOnClickListener(listener); 
     } 
    } 
} 

然後使用它是這樣的:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ViewGroup mainLayout = (ViewGroup) findViewById(R.id.main_layout); 
     setListenerToAllButtons(mainLayout, this); 
    }