Isi kandungan:
Video: Advanced Data Binding - Google I/O 2016 2024
Apabila anda memulakan projek Java baru, Android menawarkan tawaran untuk membuat aktiviti untuk projek anda. Android Studio menawarkan beberapa jenis aktiviti, seperti Aktiviti Asas, Aktiviti Kosong, Aktiviti Masuk, dan sebagainya. Jika anda meminta Aktiviti Kosong, anda akan mendapat kod ini:
pakej com. allyourcode. a10_11;
import android. sokongan. v7. aplikasi. AppCompatActivity;
import android. os. Bundle; MainActivity kelas awam meluaskan AppCompatActivity {
@Override
void dilindungi onCreate (Bundle savedInstanceState) {
super. onCreate (savedInstanceState);
setContentView (susun atur Reka bentuk. Activity_main);
}
}
Kod mengisytiharkan kelas bernama MainActivity
. Nama ini
MainActivity
bukan sebahagian daripada pustaka Android API. Ia adalah nama yang anda buat apabila anda membuat projek Android baharu. (Sebenarnya, Android Studio membuat nama itu. Anda menerima nama atau menukarnya kepada beberapa nama lain apabila anda mengikuti langkah-langkah untuk membuat projek baru.)
Kelas
MainActivity
memanjangkan kelas yang dimiliki ke pustaka SDK Android, iaitu, kelas
AppCompatActivity
. Dengan kata lain, objek
MainActivity
objek
adalah objek AppCompatActivity
. Objek
MainActivity
mempunyai semua hak dan tanggungjawab yang mana-mana
AppCompatActivity
mempunyai. Sebagai contoh,
MainActivity
mempunyai kaedah
onCreate
, yang ditolak.
MainActivity
mewarisi 460 baris kod dari kelas Android
AppCompatActivity
, yang mewarisi kira-kira 1,000 baris dari Android
Kelas FragmentActivity
, yang mewarisi kira-kira 6, 700 baris dari kelas Aktiviti Android. Kaedah yang diwarisi termasuk seperti getCallingActivity
,
getCallingPackage
,
getParent
,
getTitle
,
getTitleColor
,
99W>,
onKeyDown
,
onKeyDown
,
onKeyLongPress
,
onLowMemory
,
setTitle <,
setTitleColor
,
startActivity
, selesai, dan banyak lagi. Anda mewarisi semua fungsi ini dengan dua perkataan mudah: meluaskan
AppCompatActivity
.
Dalam istilah hubungan keluarga, kelas
MainActivity
anda adalah keturunan kelas
Aktivitas
Android. Anda
MainActivity
kelas adalah jenis
Aktiviti
.
Imej ini, diambil secara langsung dari dokumentasi dalam talian Android, meringkaskan maklumat ini tentang kelas
AppCompatActivity
.
Pokok keluarga AppCompatActivity.
Tanda halaman untuk akses mudah ke dokumentasi perpustakaan API Android.
Sebagai tambahan kepada subkelas, kelas
AppCompatActivity
melaksanakan sekumpulan antara muka, termasuk antara muka
AppCompatCallback
, antara muka TaskStackBuilder, dan lain-lain. Anda tidak perlu ingat mana-mana ini. Sekiranya anda perlu tahu, anda boleh melihatnya di halaman dokumentasi Android.
Kata kunci super Java, disemak semula
Perkataan
super
bermaksud pembina superclass. Kod yang berbeza menggunakan kata kunci
super
dengan cara yang berbeza. Ya,
super
selalu ada kaitan dengan kelas induk kelas. Tetapi, tidak,
super
tidak selalu merujuk kepada pembina kelas induk.
Dalam kaedah
onCreate
, panggilan
super. onCreate (savedInstanceState)
menghantar
savedInstanceState
ke kaedah
onCreate
kelas induk. Kelas induk ialah kelas
AppCompatActivity
. Jadi Java memanggil kaedah
AppCompatActivit
y
onCreate
.
Kaedah
AppCompatActivity
kelas
onCreat
e mengandungi panggilannya sendiri kepada
super. onCreate (savedInstanceState)
. Ibu bapa kelas
AppCompatActivity
adalah kelas
FragmentActivity
. Jadi Java melewati
savedInstanceState
ke kaedah
FragmentActivity
kelas
onCreate
. Dan sebagainya.
Tidak sampai anda mendapat
kelas
Kegiatan
ainActivity
kakek besar kelas - bahawa kod tersebut menggunakan langsung pembolehubah
savedInstanceState
. Dari maklumat
savedInstanceState
ini, kod tersebut meletakkan kembali aktiviti tersebut sebelum sistem dimusnahkan.
Pelakon, sekali lagi
Apabila anda memanggil
findViewById
, Java tidak tahu pandangan apa yang akan ditemui. Kaedah
findViewById
sentiasa mengembalikan contoh
Lihat
, tetapi banyak kelas Android memanjangkan kelas
Lihat
. Contohnya, kelas
Button
,
TextView
,
ImageView
,
Checkbox
,
Chronometer
, dan
semua memperluaskan kelas
Lihat
Android. Sekiranya anda menaip kod berikut:
// JANGAN DO INI! !
TextView textView;
textView = findViewById (R teks id id);
Java mengamalkan bunyi gemerincing yang menyeramkan: "Berani anda mengandaikan bahawa objek yang dikembalikan oleh panggilan ke
findViewById
merujuk kepada contoh kelas
TextView
! "(Sebenarnya, Java secara senyap-senyap dan mekanikal memaparkan mesej ralat
Jenis tidak serasi
dalam editor Android Studio.)
Narrowing
bermakna cuba menetapkan nilai
panjang
ke nilai int. Nilai panjang
mempunyai 64 bit, dan nilai int
hanya mempunyai 32 bit. Jadi cubaan menyempitkan gagal. Dalam kod yang anda dapati di sini, panggilan
findViewById
yang buruk adalah satu lagi percubaan untuk melakukan penyempitan - menyerahkan nilai
Lihat
yang dikembalikan oleh panggilan kaedah kepada pembolehubah
TextView
.Kelas
TextView
adalah kelas subclass
Lihat
, jadi tugasan gagal secara mendadak.
menenangkan tuhan-tuhan Jawa dengan menambahkan operator pemutus ke kod. Anda memberitahu Java untuk mengubah apa saja pop keluar dari panggilan metode
findViewById
ke objek
TextView
.
textView =
(TextView)
findViewById (R id id textView1);
Semasa anda menaip kod itu, humor Java anda dan berkata, "Operator pemutus anda menunjukkan kepada saya bahawa anda menyedari perbezaan antara
TextView
dan mana-mana
View
. Saya akan melakukan yang terbaik untuk mentafsirkan objek Lihat yang saya dapati semasa runtime sebagai objek
TextView
. "(Sebenarnya, semasa anda menaip kod, Java tidak mengatakan apa-apa.Kebenaran bahawa Java tidak memaparkan sebarang mesej ralat apabila anda menggunakan helah pemutus ini merupakan petanda yang baik. Ciri pemutus Java menjimatkan hari!)
Pemutus menghalang anda daripada melihat mesej ralat semasa anda membangunkan kod anda. Dengan cara itu, pemutus adalah ciri yang sangat berguna di Jawa. Tetapi pemutus tidak dapat menyelamatkan anda jika kod anda mengandungi ralat runtime. Apabila anda menaip
textView = (TextView) findViewById (R id id textView1);
anda mengesahkan bahawa nama
textView
mewakili widget
TextView
. Apabila aplikasi berjalan, Java mengambil
R. ID. widget textView
dari
activity_main. fail xml
, dan semuanya berfungsi dengan baik. Tetapi kadang-kadang anda mungkin lupa untuk memeriksa
R anda. java
nama terhadap komponen dalam fail XML. Panggilan ke
findViewById
mengherankan komponen
Button
apabila pemutus anda memberitahu Java untuk mengharapkan widget
TextView
. Apabila ini berlaku, Java mencekik pada operator pemutus dan kemalangan aplikasi anda semasa menjalankannya. Kembali ke papan lukisan!