如何注册多个监听器在Android中?监听器、多个、Android

2023-09-06 23:48:05 作者:哀悼伤痛

在我的iOS可以注册例如多个目标+动作事件处理程序像这样的按钮:

  @implementation的ViewController - (无效)viewDidLoad中{    [超级viewDidLoad中];    的UIButton *按键= [[的UIButton的alloc] initWithFrame:方法CGRectMake(20,40,300,40)];    [按钮setBackgroundColor:[的UIColor blueColor]];    [按钮的setTitle:@点击我! forState:UIControlStateNormal];    [按钮addTarget:自我行动:@selector(handler1)forControlEvents:UIControlEventTouchUpInside];    [按钮addTarget:自我行动:@selector(handler2)forControlEvents:UIControlEventTouchUpInside];    [self.view addSubview:键];} - (无效){handler1    的NSLog(@点击处理1); //火灾!} - (无效){handler2    的NSLog(@点击处理2); //火灾!}@结束 

我想实现的Java / Android的类似的事情,可惜这还不至于第一个监听得到由第二替换工作:

 公共类MainActivity扩展AppCompatActivity {  @覆盖  保护无效的onCreate(捆绑savedInstanceState){    super.onCreate(savedInstanceState);    的setContentView(R.layout.activity_main);    Button按钮=(按钮)findViewById(R.id.button);    button.setText(点击我!);    button.setOnClickListener(新View.OnClickListener(){      @覆盖      公共无效的onClick(视图v){        Log.d(测试,点击处理1); //不火!      }    });    button.setOnClickListener(新View.OnClickListener(){      @覆盖      公共无效的onClick(视图v){        Log.d(测试,点击处理2); //火灾!      }    });  }} 
Android界面控件 2 注册点击事件监听器

我AP preciate任何帮助和放大器;建议来达到同样的用Java / Android的解决方案

采用的是Android何尝不是同样的方式处理,这只是简单的创建两个方法这样:

  button.setOnClickListener(新View.OnClickListener(){      @覆盖      公共无效的onClick(视图v){        方法一();        方法2();      }    });   私人无效方法1(){     Log.d(测试,点击处理1);   }   私人无效方法2(){     Log.d(测试,点击处理2);   } 

随着文档为 View.OnClickListener 状态:

  

注册一个回调时,这个观点是点击背景下被调用。如果视图不是背景下点击,就变成可点击的情况下

多个回调,默认情况下不执行,但你可以自己实现它。

In iOS I can register multiple target+action event handlers for e.g. a button like this:

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(20, 40, 300, 40)];
    [button setBackgroundColor:[UIColor blueColor]];
    [button setTitle:@"Click Me!" forState:UIControlStateNormal];
    [button addTarget:self action:@selector(handler1) forControlEvents:UIControlEventTouchUpInside];
    [button addTarget:self action:@selector(handler2) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
}

- (void)handler1 {
    NSLog(@"Click handler 1"); // FIRES!
}

- (void)handler2 {
    NSLog(@"Click handler 2"); // FIRES!
}

@end

I want to achieve something similar in Java/Android, unfortunately this won't work so far as the first listener gets replaced by the second:

public class MainActivity extends AppCompatActivity {

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

    Button button = (Button) findViewById(R.id.button);
    button.setText("Click Me!");
    button.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        Log.d("Test", "Click handler 1"); // DOES NOT FIRE!
      }
    });
    button.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        Log.d("Test", "Click handler 2"); // FIRES!
      }
    });

  }
}

I appreciate any help & suggestions to achieve the same in Java/Android!

解决方案

Is it not handled the same way in Android and it is just simpler to create two methods as such:

button.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        method1();
        method2();
      }
    });

   private void method1(){
     Log.d("Test", "Click handler 1");
   }

   private void method2(){
     Log.d("Test", "Click handler 2");
   }

As the docs for View.OnClickListener state:

Register a callback to be invoked when this view is context clicked. If the view is not context clickable, it becomes context clickable

Multiple callbacks are not implemented by default, but you could implement it yourself.