簡體   English   中英

如何在Android中注冊多個偵聽器?

[英]How to Register Multiple Listeners in Android?

在iOS中,我可以為多個按鈕注冊多個target + action事件處理程序,例如:

@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

我想在Java / Android中實現類似的功能,不幸的是,只要第一個偵聽器替換為第二個偵聽器,這將無法正常工作:

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

  }
}

感謝您在Java / Android中實現相同的幫助和建議!

閱讀有關RxJava的未來:) http://reactivex.io/

ViewObservable.clicks((Button) getActivity().findViewById(R.id.comment_btn))
            .compose(lifecycleMainObservable().<OnClickEvent>bindLifecycle())
            .subscribe(new Action1<OnClickEvent>() {
                @Override
                public void call(OnClickEvent onClickEvent) {
                    Log.d("Button click", "Button 1 click");
                }
            });

ViewObservable.clicks((Button) getActivity().findViewById(R.id.comment_btn))
            .compose(lifecycleMainObservable().<OnClickEvent>bindLifecycle())
            .subscribe(new Action1<OnClickEvent>() {
                @Override
                public void call(OnClickEvent onClickEvent) {
                    Log.d("Button click", "Button 2 click");
                }
            });

是不是在Android中以相同的方式處理,並且創建兩個這樣的方法更簡單:

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

作為View.OnClickListener狀態的文檔

注冊上下文單擊上下文時要調用的回調。 如果視圖不是上下文可單擊的,則它變為上下文可單擊的

默認情況下不實現多個回調,但是您可以自己實現。

暫無
暫無

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

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