如何注册多个监听器在Android中? [英] How to Register Multiple Listeners in Android?

查看:99
本文介绍了如何注册多个监听器在Android中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的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); //火灾!
      }
    });  }
}

我AP preciate任何帮助和放大器;建议来达到同样的用Java / Android的<!/ P>

解决方案

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

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

随着<一个href=\"http://developer.android.com/reference/android/view/View.html#setOnClickListener(android.view.View.OnClickListener)\"相对=nofollow>文档为 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.

这篇关于如何注册多个监听器在Android中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆