Bagaimana cara mensimulasikan klik tombol menggunakan kode?

216

Bagaimana saya bisa memicu acara klik tombol menggunakan kode di Android? Saya ingin memicu klik tombol secara terprogram ketika beberapa peristiwa lain terjadi.

Masalah yang sama yang saya hadapi

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

Kode tombol:

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

Tapi saya ingin memanggil fungsi itu OnLoadLayout tanpa OnClickEvent

sam
sumber
bisakah Anda menentukan masalahnya? mengapa kamu menginginkan itu? Apakah Anda ingin memicu beberapa kode untuk dieksekusi?
Vladimir Ivanov
ya, saya ingin memicu kode yang akan dieksekusi untuk klik tombol.
sam

Jawaban:

445

ada cara yang lebih baik.

View.performClick();

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

ini harus menjawab semua masalah Anda. setiap View mewarisi fungsi ini, termasuk Button, Spinner, dll.

Hanya untuk memperjelas, Lihat tidak memiliki metode performClick () statis. Anda harus memanggil performClick () pada instance View. Misalnya, Anda tidak bisa menelepon begitu saja

View.performClick();

Sebagai gantinya, lakukan sesuatu seperti:

View myView = findViewById(R.id.myview);
myView.performClick();
moonlightcheese
sumber
2
Tapi apa tombol kembali untuk Android?
Peter Ajtai
4
tidak ada "Lihat" untuk tombol kembali di ponsel Anda. Anda perlu menggunakan pendengar utama untuk mendapatkan penekanan tombol itu. itu masalah yang berbeda sama sekali.
moonlightcheese
3
@moon - Jika Anda ingin orang lain memberi tahu komentar Anda, mulailah dengan "@" dan beberapa huruf pertama dari pengguna yang ingin Anda beri tahu .... (penulis komentar di pos secara otomatis mendapat pemberitahuan, tetapi komentator melakukannya not)
Peter Ajtai
14
Kode yang ditunjukkan dalam jawaban ini sedikit membingungkan. Hanya untuk memperjelas, View tidak memiliki metode performClick () statis. Anda harus memanggil performClick () pada instance View.
Łukasz Wiklendt
3
itu hanya membingungkan jika Anda tidak tahu apa yang Anda lakukan.
moonlightcheese
52

Hanya untuk mengklarifikasi apa yang dikatakan moonlightcheese: Untuk memicu peristiwa klik tombol melalui kode di Android, berikan yang berikut:

buttonName.performClick();
Scott Tovey
sumber
12

kamu bisa melakukannya dengan cara ini

private Button btn;
btn = (Button)findViewById(R.id.button2);
btn.performClick();
Tushar Saha
sumber
7

Android callOnClick()( ditambahkan dalam API 15 ) terkadang bisa menjadi pilihan yang lebih baik dalam pengalaman saya daripada performClick(). Jika pengguna memiliki suara pilihan yang diaktifkan, maka performClick()dapat menyebabkan pengguna mendengar dua suara pemilihan kontinu yang agak berlapis satu sama lain yang dapat menggelegar. (Satu suara pilihan untuk klik tombol pertama pengguna, lalu satu lagi untuk tombol lain OnClickListeneryang Anda panggil melalui kode.)

Charles Madere
sumber
7

Cukup tulis baris kode sederhana ini: -

button.performClick();

di mana tombol adalah variabel referensi dari kelas Tombol dan didefinisikan sebagai berikut: -

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

Itu dia.

Deepak Sharma
sumber
6

Dimulai dengan API15, Anda dapat menggunakan juga callOnClick()yang secara langsung memanggil tampilan terlampir OnClickListener. Tidak seperti performClick (), ini hanya memanggil pendengar, dan tidak melakukan tindakan mengklik terkait seperti melaporkan peristiwa aksesibilitas.

Colateral
sumber
4

Jika Anda tidak menggunakan senderargumen, mengapa tidak refactor implementasi penangan tombol untuk memisahkan fungsi, dan memanggilnya dari mana pun Anda inginkan (dari penangan tombol dan dari tempat lain).

Bagaimanapun, ini adalah desain yang lebih baik dan lebih bersih - kode yang perlu dipanggil pada handler tombol DAN dari beberapa tempat lain layak untuk di refactored untuk fungsinya sendiri. Plus itu akan membantu Anda memisahkan penanganan UI dari kode logika aplikasi. Anda juga akan memiliki nama yang bagus untuk fungsinya, bukan hanya onDateSelectedButtonClick ().

dpopov
sumber