Mekanisme pengendalian acara berasaskan panggilan balik
Pengenalan kepada bahagian ini
Dalam 3.1 kami mengkaji mekanisme pemprosesan acara dalam Android - mekanisme pemprosesan acara berdasarkan pendengaran Tambahkan pendengar pada sumber acara kami (komponen), dan kemudian apabila pengguna mencetuskan acara, ia diserahkan kepada pendengar untuk mengendalikan, mengikut acara yang berbeza Lakukan operasi yang berbeza; jadi apakah prinsip mekanisme pemprosesan acara berasaskan panggilan balik? Okay, satu lagi soalan: anda tahu Apakah itu kaedah panggil balik? Adakah anda tahu? Saya percaya ramai rakan mengetahuinya, tetapi mereka tidak dapat meluahkannya! Okay, dengan soalan-soalan ini kita Mari analisa mekanisme pemprosesan acara panggil balik dalam mekanisme pemprosesan acara android!
1. Apakah kaedah panggilan balik?
Penerangan teks:
Jawapan: Ia adalah satu cara untuk memisahkan definisi dan fungsi fungsi, idea reka bentuk decoupling dalam Java Ia dilaksanakan melalui antara muka, Sebagai seni bina sistem, ia mesti mempunyai persekitaran operasi sendiri dan menyediakan pengguna dengan antara muka pelaksanaan bergantung kepada pelanggan, supaya Untuk mencapai antara muka bersatu dan pelaksanaan yang berbeza, sistem mencapai pemisahan antara muka dan pelaksanaan dengan "memanggil semula" kelas pelaksanaan kami di negeri yang berbeza!
Contoh mudah:
Contohnya: Anda pulang dari sekolah pada hari Jumaat dan anda meminta ibu anda untuk masak Adakah nasi itu sedap? Ibu, izinkan saya melihat Kambing yang menyenangkan Apabila anda telah memasak nasi, hubungi saya Analisis: Anda dan ibu anda telah bersetuju dengan antara muka ini nasi dah siap, , mak awak Ia juga akan memberi anda maklum balas melalui antara muka ini, "Nasi sudah masak"!
2. Penjelasan terperinci tentang mekanisme pemprosesan acara panggilan balik Android:
Terdapat dua senario penggunaan untuk mekanisme pemprosesan acara berasaskan panggilan balik dalam Android:
1) Paparan penyesuaian
Apabila pengguna melancarkan acara pada komponen GUI, komponen tersebut mempunyai kaedah khusus tersendiri yang bertanggungjawab untuk mengendalikan acara tersebut. Penggunaan biasa: Warisi komponen GUI asas dan tulis semula kaedah pemprosesan acara komponen, iaitu, sesuaikan paparan Nota: Apabila menggunakan paparan tersuai dalam reka letak xml, anda perlu menggunakan "nama kelas yang layak sepenuhnya"
Kaedah panggil balik komponen Paparan biasa:
android Menyediakan beberapa kaedah panggil balik pemprosesan acara untuk komponen GUI Sebagai contoh, terdapat kaedah berikut
①Pencetuskan peristiwa skrin pada komponen ini: boolean onTouchEvent(MotionEvent event);
②Apabila butang ditekan pada komponen ini: boolean onKeyDown(int keyCode, Acara KeyEvent);
③Apabila melepaskan butang pada komponen: boolean onKeyUp(int keyCode,KeyEvent event);
④Apabila menekan lama butang pada komponen : boolean onKeyLongPress(int keyCode,KeyEvent event);
⑤Acara pintasan papan kekunci berlaku: boolean onKeyShortcut(int keyCode,KeyEvent event);
⑥Pada komponen Cetuskan acara skrin bola jejak: boolean onTrackballEvent (MotionEvent event);
*⑦Apabila fokus komponen berubah, tidak seperti 6 sebelumnya, kaedah ini hanya boleh ditulis semula dalam View! protected void onFocusChanged(boolean gainFocus, int direction, Rect before FocusedRect)
Selain itu, ini menerangkan apa itu trackball, tetapi ia tidak begitu berguna pada masa lalu. Telefon bimbit BlackBerry Anda boleh melihatnya semasa kami menyemak imbas web , anda boleh menganggap bola jejak sebagai tetikus, tetapi kami boleh menyelesaikan operasi ini menggunakan onTouchEvent, dan ia tidak cukup cantik, jadi sekarang Ia sangat berguna dan pada dasarnya tidak diperlukan Jika anda berminat dan ingin melihatnya, anda boleh menekan f6 dalam emulator Android asal untuk melihatnya
Contoh kod. : Kami menyesuaikan kelas MyButton untuk mewarisi kelas Button, dan kemudian mengatasi kaedah onKeyLongPress; Kemudian panggil paparan tersuai
melalui nama kelas yang layak sepenuhnya dalam fail xml Rendering adalah seperti berikut:
<. 🎜>
Butang mudah yang mencetuskan acara onTouchEvent selepas mengklik butang Apabila kami menekan papan kekunci pada simulator, Acara onKeyDown dicetuskan apabila ditekan dan acara onKeyUp dicetuskan apabila meninggalkan papan kekunci! Mari semak melalui Logcat!Kod pelaksanaan: MyButton.java
TAG String statik peribadi = "haha";
MyButton awam(Konteks Konteks, AttributeSet attrs) {
super(konteks, attrs); }
//Tulis semula peristiwa yang dicetuskan oleh tekan papan kekunci
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
super.onKeyDown(keyCode, event); Log.i(TAG, "kaedah onKeyDown dipanggil");
kembalikan benar;
}
//Tulis semula peristiwa yang dicetuskan dengan muncul papan kekunci
@Override
awam boolean onKeyUp(int keyCode, KeyEvent event) {
super.onKeyUp(keyCode, event); 🎜>
//Komponen telah disentuh
@Override
public boolean onTouchEvent(Moti onEvent event) {
super.onTouchEvent(event);
Log.i(TAG," kaedah onTouchEvent ialah panggilan");
kembali benar;
}
}
Fail reka letak:
xmlns: tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MyActivity"> >
<example.jay.com.mybutton.MyButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="button"/> ;
Analisis kod:
Oleh kerana kami terus menulis semula tiga kaedah panggil balik Button, apabila peristiwa klik berlaku, kami tidak perlu menambahkannya ke fail Java sedang berjalan Pengikatan pendengar acara boleh melengkapkan panggilan balik, iaitu, komponen akan memproses acara yang sepadan, iaitu, acara dikendalikan oleh sumber peristiwa (komponen) itu sendiri!
2) Penyebaran acara berasaskan panggilan balik: Ringkasnya, sama ada untuk disebarkan ke luar bergantung pada nilai pulangan kaedah Adakah ia benar atau salah;
Contoh kod:
}
//Tulis semula peristiwa yang dicetuskan oleh penekanan papan kekunci
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
super. onKeyDown(keyCode, event);
Log.i(TAG, "Kaedah onKeyDown bagi butang tersuai dipanggil");
return false;
main.xml:
xmlns :tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MyActivity">
<example.jay.com.mybutton.MyButton
android:layout_width="wrap_content"
android 自定义按钮"
android:id="@+id/btn_my"/>
</LinearLayout>
MainActivity.java:
@Override
dilindungi tidak sah {🎜 dilindungi (🜳 dilindungi tidak sah super.onCreate (savedInstanceState);
setContentView(R.layout.activity_my);
Butang btn = (Button)findViewById(R.id.btn_my);
btn.setOnKeyListener(new View.OnKeyListener() {
@Override
( public boolean v, int View v, public boolean onKey 🎜> if(event.getAction() == KeyEvent. ACTION_DOWN)
{
Log.i("呵呵","监听器的 onKeyDown方方 被 }
kembalikan salah;
}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
(event super.onKey);
Log.i("呵呵","Aktiviti的onKeyDown方法被调用");
pulangan palsu;
}
}
Jalankan tangkapan skrin:
Analisis keputusan: Daripada hasil yang dijalankan di atas, kita boleh mengetahui bahawa susunan penyebaran ialah: Pendengar--->Kaedah panggil balik komponen paparan--->Kaedah Panggilan Balik Aktiviti ;
Ringkasan bahagian ini
Bahagian ini menerangkan mekanisme pemprosesan acara berasaskan panggilan balik dalam mekanisme pemprosesan acara Android! Inti ialah susunan penyebaran peristiwa Pendengar mengambil keutamaan, kemudian kepada komponen Lihat itu sendiri, dan akhirnya kepada Aktiviti nilai pulangan palsu terus disebarkan, dan benar menamatkan penyebaran~!