簡體   English   中英

使用Android捕獲任何按鈕中的點擊

[英]Capture click in any button with android

誰來捕捉任何按鈕的點擊?

final Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
       public void onClick(View v) {
            Toast.makeText(WHKConversorActivity.this, "Hello World", Toast.LENGTH_SHORT).show();                    
       }
 });

這是一個對button1的單擊,但是我需要所有按鈕的功能:-/。 JavaScript中的示例:

$('button').click(function(){
    alert($(this).val());
});

謝謝 :)

如果您希望所有按鈕執行完全相同的操作(這不太可能),則可以將相同的單擊偵聽器綁定到每個按鈕。 例如:

final Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(mGlobalClick);

final Button button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(mGlobalClick);

... ect

OnClickListener mGlobalListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
            //Stuff
            }
};

或者,如果您希望每個按鈕執行不同的操作,但每個按鈕仍需要某種重新實現的功能,則可以將該部分代碼放在單獨的方法中,並在每個單擊偵聽器中引用它

public void GlobalStuff(){
     //Stuff
}

OnClickListener mSpecificListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
            GlobalStuff();
            //More Stuff
            }
};

沒有像javascript這樣的通用方法。 您需要將點擊處理程序分別分配給所有按鈕。

您可以嘗試覆蓋Button類,並在其構造函數中調用addListener

假設您活動中的所有視圖都在某種ViewGroup中,則可以使用以下方法:

private void applyToAllButtons(ViewGroup viewGroup, OnClickListener listener) {
    for (int i = 0; i < viewGroup.getChildCount(); i++) {
        if (viewGroup.getChildAt(i) instanceof Button) {
            viewGroup.getChildAt(i).setOnClickListener(listener);
        }
    }
}

然后,在您的onCreate()中,執行以下操作:

@Override
public void onCreate(Bundle savedInstanceState) {
    ... // old code here
    View view = findViewById(R.id.layoutRoot);
    setContentView(view);
    OnClickListener listener = new OnClickListener() {
        public void onClick(View v) {
            // Do stuff here.
        }
    };
    applyToAllButtons((ViewGroup) view, listener);
}

謝謝傑克...這更有用:)減少變量,減少內存。 OnClickListener放在老虎之前:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        OnClickListener globalClick = new View.OnClickListener() {
            public void onClick(View v) {
                // some functions...
            }
        };

        /* Tiggers */
        findViewById(R.id.button1).setOnClickListener(globalClick);
        findViewById(R.id.button2).setOnClickListener(globalClick);
        findViewById(R.id.button3).setOnClickListener(globalClick);
        findViewById(R.id.button4).setOnClickListener(globalClick);
        findViewById(R.id.button5).setOnClickListener(globalClick);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM