【问题标题】:Capture click in any button with android使用android捕获任何按钮的点击
【发布时间】:2012-08-02 13:57:28
【问题描述】:

谁来捕捉任何按钮的点击?

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

谢谢:)

【问题讨论】:

  • 我不明白。你想让你的按钮调用相同的方法还是不同的方法?
  • 运行一个包含所有按钮的循环并在循环内添加监听器
  • 应用程序包含 18 个按钮,每个按钮点击显示两张相同的图片,但每个按钮显示不同的文本。这个想法是捕获所有按钮以显示两个图像并为每个按钮显示文本
  • 示例:all.click = 显示图像和操作(thisbutton.id); ... action(idbutton){ 每个动作 }

标签: java android onclick android-button


【解决方案1】:

如果您希望所有按钮执行完全相同的操作(这不太可能),您可以将相同的点击侦听器绑定到每个按钮。例如:

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
            }
};

【讨论】:

    【解决方案2】:

    假设您的活动中的所有视图都在某种视图组中,您可以使用这个:

    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);
    }
    

    【讨论】:

    • 硬核内存对循环很有用
    【解决方案3】:

    没有像 javascript 那样的通用方式。您需要将点击处理程序分别分配给所有按钮。

    【讨论】:

      【解决方案4】:

      您可以尝试覆盖Button 类,并在其构造函数中调用addListener

      【讨论】:

        【解决方案5】:

        谢谢杰克...这更有用:) 更少的变量,更少的内存。 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);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多