Saya memiliki Activity
dengan 3 EditText
dan tampilan kustom yang bertindak keyboard khusus untuk menambahkan informasi ke dalam EditText
.
Saat ini saya meneruskan Activity
tampilan sehingga saya bisa mendapatkan teks edit yang saat ini difokuskan dan memperbarui konten dari keyboard khusus.
Apakah ada cara mereferensikan aktivitas orang tua dan membuat fokus saat ini EditText
tanpa meneruskan aktivitas ke tampilan?
Jawaban:
Saya baru saja menarik kode sumber dari MediaRouter di perpustakaan dukungan resmi dan sejauh ini berfungsi dengan baik:
sumber
metode berikut dapat membantu Anda
Activity host = (Activity) view.getContext()
; danview.isFocused()
sumber
getContext()
mungkin tidak selalu mengembalikan objek Aktivitas jika Tampilan Anda tidak dipanggil dari konteks Aktivitas. Pastikan untuk merencanakan ini ke depan dan memberikan mundur yang tepat.ContextThemeWrapper
toActivity
akan melemparClassCastException
. Anda perlu cara untuk membuka konteks dasar (yang seharusnya merupakan suatu Kegiatan), yang dengan sendirinya berbahaya karena ada versi asli dan v7ContextThemeWrapper
.Saya suka solusi ini ditulis dalam Kotlin
Penggunaan di
View
kelasKode yang didekompilasi:
sumber
Aku mengambil Gomino 's jawaban dan dimodifikasi untuk cocok dengan sempurna di myUtils.java sehingga saya dapat menggunakannya di mana pun dan kapan pun saya perlu. Semoga seseorang merasa terbantu :)
sumber
Di Android 7+ tampilan tidak lagi memiliki akses ke aktivitas terlampir, jadi
view.getContext()
tidak dapat lagi dilemparkan ke suatu Aktivitas.Sebaliknya, kode di bawah ini berfungsi di Android 7+ dan 6:
sumber
getContext
mungkin akan mengembalikan aContextThemeWrapper
sehingga View tidak memiliki akses langsung ke Activity lagi. Sebagai gantinya, Anda harus mencari secara rekursif melalui konteks induk hingga Anda menemukan Aktivitas induk atau menggunakan metode yang saya berikan dalam jawaban ini.Properti ekstensi Kotlin untuk View untuk mengambil aktivitas induk:
sumber
if
denganwhen
danisInstance()
dengan!is ContextWrapper
atauis Activity
@Override boolean publik shouldOverrideUrlLoading (tampilan WebView, permintaan WebResourceRequest) {if (request.getUrl (). GetHost (). Dimulai dengan ("pay.google.com")) {Intent intent = new Intent (Intent.ACTION_VIEW, request.getUrl ()); view.getContext (). startActivity (intent); kembali benar; } ... ...}
sumber