Làm thế nào để mô phỏng một nút bấm bằng cách sử dụng mã?


216

Làm cách nào để kích hoạt sự kiện nhấn nút bằng mã trong Android? Tôi muốn kích hoạt nút bấm lập trình khi một số sự kiện khác xảy ra.

Vấn đề tương tự tôi đang phải đối mặt

public void onDateSelectedButtonClick(View v){
    /*Something  Alarm Management 
    http://www.java2s.com/Code/Android/Core-Class/Alarmdemo.htm
    copied code from this site*/
}

Mã nút:

<Button
    android:onClick="onDateSelectedButtonClick"
    android:text="Set notification for this date" />

Nhưng tôi muốn gọi chức năng đó là OnLoadLayout mà không có OnClickEvent


bạn có thể vui lòng chỉ định vấn đề? Tại sao bạn lại muốn điều đó? Bạn có muốn kích hoạt một số mã được thực thi?
Vladimir Ivanov

có, tôi muốn kích hoạt mã được thực thi cho nút bấm.
sam

Câu trả lời:


445

có một cách tốt hơn.

View.performClick();

http://developer.android.com/reference/android/view/View.html#performClick ()

điều này sẽ trả lời tất cả các vấn đề của bạn. mọi Chế độ xem đều kế thừa chức năng này, bao gồm Nút, Spinner, v.v.

Chỉ cần làm rõ, View không có phương thức staticClick (). Bạn phải gọi PerformanceClick () trên một phiên bản của View. Ví dụ: bạn không thể gọi

View.performClick();

Thay vào đó, hãy làm một cái gì đó như:

View myView = findViewById(R.id.myview);
myView.performClick();

2
Nhưng nút quay lại của View cho Android là gì?
Peter Ajtai

4
không có "Chế độ xem" cho nút quay lại trên điện thoại của bạn. bạn cần sử dụng các trình nghe chính để có được những lần nhấn nút đó. đó là một vấn đề khác nhau hoàn toàn.
moonlightcheese

3
@moon - Nếu bạn muốn mọi người thông báo về nhận xét của mình, hãy bắt đầu bằng "@" và một vài chữ cái đầu tiên của người dùng mà bạn muốn thông báo .... (tác giả của bài bình luận trên bài đăng sẽ tự động nhận được thông báo không)
Peter Ajtai

14
Mã hiển thị trong câu trả lời này là một chút bối rối. Chỉ cần làm rõ, View không có phương thức staticClick (). Bạn phải gọi PerformanceClick () trên một phiên bản của View.
Łukasz Wiklendt

3
nó chỉ gây nhầm lẫn nếu bạn không biết những gì bạn đang làm.
moonlightcheese

52

Chỉ cần làm rõ những gì moonlightcheese đã nêu: Để kích hoạt một sự kiện nhấn nút thông qua mã trong Android cung cấp các thông tin sau:

buttonName.performClick();

12

bạn có thể làm theo cách này

private Button btn;
btn = (Button)findViewById(R.id.button2);
btn.performClick();

7

Android callOnClick()( được thêm vào API 15 ) đôi khi có thể là một lựa chọn tốt hơn trong trải nghiệm của tôi hơn performClick(). Nếu người dùng bật âm thanh lựa chọn, thì performClick()có thể khiến người dùng nghe thấy hai âm thanh lựa chọn liên tục được xếp chồng lên nhau có thể bị chói tai. (Một âm thanh lựa chọn cho lần nhấp nút đầu tiên của người dùng và sau đó là âm thanh khác cho nút khác OnClickListenermà bạn đang gọi qua mã.)


7

Chỉ cần viết dòng mã đơn giản này: -

button.performClick();

nút trong đó là biến tham chiếu của lớp Nút và được định nghĩa như sau: -

private Button buttonToday ;
buttonToday = (Button) findViewById(R.id.buttonToday);

Đó là nó.


6

Bắt đầu với API15, bạn cũng có thể sử dụng callOnClick()trực tiếp cuộc gọi đính kèm OnClickListener. Không giống như PerformanceClick (), điều này chỉ gọi người nghe và không thực hiện bất kỳ hành động nhấp chuột liên quan nào như báo cáo sự kiện trợ năng.


4

Nếu bạn không sử dụng senderđối số, tại sao không cấu trúc lại việc thực hiện trình xử lý nút để tách chức năng và gọi nó từ bất cứ nơi nào bạn muốn (từ trình xử lý nút và từ nơi khác).

Dù sao, nó là một thiết kế tốt hơn và sạch hơn - một mã cần được gọi trên trình xử lý nút VÀ từ một số nơi khác xứng đáng được tái cấu trúc để sở hữu chức năng. Thêm vào đó, nó sẽ giúp bạn tách xử lý UI khỏi mã logic ứng dụng. Bạn cũng sẽ có một tên đẹp cho hàm, không chỉ onDateSelectedButtonClick ().

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.