Saya mencoba melakukan tata letak tab yang sama di Play Store. Saya harus menampilkan tata letak tab menggunakan fragmen dan viewpager dari androidhive. Namun, saya tidak dapat menerapkan google maps v2 di atasnya. Saya sudah mencari di internet selama berjam-jam, tetapi saya tidak dapat menemukan tutorial tentang cara melakukannya. Bisakah seseorang tunjukkan caranya?
android
google-maps
android-fragments
Jeongbebs
sumber
sumber
Activity
danFragment
pernahgetChildFragmentManager()
digunakan.Jawaban:
Dengan menggunakan kode ini kita dapat mengatur MapView di mana saja, di dalam ViewPager atau Fragmen atau Aktivitas apa pun.
Di pembaruan terbaru Google untuk Maps, hanya MapView yang didukung untuk fragmen. MapFragment & SupportMapFragment tidak berfungsi. Saya mungkin salah tetapi ini yang saya lihat setelah mencoba mengimplementasikan MapFragment & SupportMapFragment.
Menyiapkan tata letak untuk menampilkan peta dalam file
location_fragment.xml
:Sekarang, kami memberi kode pada kelas Java untuk menampilkan peta dalam file
MapViewFragment.java
:Akhirnya Anda perlu mendapatkan Kunci API untuk aplikasi Anda dengan mendaftarkan aplikasi Anda di Google Cloud Console . Daftarkan aplikasi Anda sebagai Aplikasi Android Asli.
sumber
<uses-library android:name="com.google.android.maps" android:required="true" />
untuk Maps V1, bukan Maps V2. Akan ada perangkat di masa depan yang tidak memilikicom.google.android.maps
perpustakaan firmware tetapi sangat mampu menampilkan peta Maps V2. Memiliki baris ini di manifes Anda akan mencegah Anda berjalan di perangkat tersebut, dan baris ini tidak diperlukan untuk penggunaan Maps V2. Misalnya, 17 proyek di github.com/commonsguy/cw-omnibus/tree/master/MapsV2 tidak memiliki<uses-library>
elemen ini dan berfungsi dengan baik.java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.maps.api.android.lib6.impl.bo.o()' on a null object reference
Pendekatan berikut bekerja untuk saya.
fragment_location_info.xml
sumber
java.lang.NullPointerException: IBitmapDescriptorFactory is not initialized
. Saya pikir coba tangkap akan mengatasi ini. Adakah yang bisa membantu saya?mMapView
?getMap()
sudah ditinggalkan. Gunakan getMapAsync dan onMapReadyCallback sebagai gantinya: stackoverflow.com/a/31371953/4549776Anda dapat menggunakan baris ini jika Anda ingin menggunakannya
GoogleMap
dalam sebuah fragmen:sumber
Barang-barang terbaru dengan
getMapAsync
bukannya yang sudah usang.1. periksa manifes
Anda bisa mendapatkan Kunci API untuk aplikasi Anda dengan mendaftarkan aplikasi Anda di
Google Cloud Console
. Daftarkan aplikasi Anda sebagai Aplikasi Android Asli2. di tata letak fragmen Anda .xml tambahkan FrameLayout (bukan fragmen):
atau apa pun ketinggian yang Anda inginkan
3. Di onCreateView di fragmen Anda
sumber
<fragment
bukanFrameLayout
SupportMapFragment
keMapFragment
dalam aktivitas, mengubahFrameLayout
kefragment
dalam file tata letak dan dan mengubahnyacom.google.android.gms.maps.SupportMapFragment
menjadicom.google.android.gms.maps.MapFragment
berfungsi dengan baik untuk saya. Sebelum perubahan ini tidak berhasil. Mungkin ini membantu orang lain ....di sini apa yang saya lakukan secara detail:
Dari sini Anda bisa mendapatkan kunci api peta google
cara alternatif dan sederhana
masuk terlebih dahulu ke akun google Anda dan kunjungi perpustakaan Google dan pilih Google Maps Android API
Ketergantungan ditemukan dalam aktivitas peta default Android Studio:
masukkan kunci Anda ke file android mainifest di bawah aplikasi seperti di bawah ini
di AndroidMainifest.xml lakukan perubahan ini:
Kode fragmen:
di dalam kamu fragmen xml:
sumber
Untuk masalah mendapatkan
NullPointerException
ketika kami mengubah Tab di,FragmentTabHost
Anda hanya perlu menambahkan kode ini ke kelas Anda yang memilikiTabHost
. Maksud saya kelas tempat Anda menginisialisasi tab. Ini kodenya:sumber
di fragment_layout
sumber
Saat Anda menambahkan, gunakan peta:
bukannya
.add
dan bukannyagetFragmentManager
.sumber
saya hanya membuat MapActivity dan mengembang menjadi fragmen. MapActivity.java:
activity_map.xml:
MapFragment.java:-
sumber
Aku punya solusi untuk
NullPointerException
saat menghapus fragmen di atasDestoryView
, Hanya menempatkan kode Anda dionStop()
tidakonDestoryView
. Ini bekerja dengan baik!sumber
Menurut https://developer.android.com/about/versions/android-4.2.html#NestedFragments , Anda dapat menggunakan fragmen bersarang untuk mencapai ini dengan memanggil getChildFragmentManager () jika Anda masih ingin menggunakan fragmen Google Maps daripada lihat di dalam fragmen Anda sendiri:
di mana "konten" adalah tata letak root di fragmen Anda (lebih disukai FrameLayout). Keuntungan menggunakan fragmen peta adalah bahwa siklus hidup peta dikelola secara otomatis oleh sistem.
Meskipun dokumentasi mengatakan "Anda tidak dapat mengembang tata letak menjadi sebuah fragmen ketika tata letak itu termasuk <fragment>. Fragmen bersarang hanya didukung ketika ditambahkan ke fragmen secara dinamis.", Saya entah bagaimana berhasil melakukan ini dan itu berfungsi dengan baik. Ini kode saya:
Di metode onCreateView () fragmen:
Dalam tata letak:
Semoga ini bisa membantu!
sumber
Menambahkan fragmen peta secara dinamis untuk melihat Pager:
Jika Anda menargetkan aplikasi lebih awal dari API level 12, buat instance SupportedMapFragment dan tambahkan ke adaptor halaman tampilan Anda.
API level 12 atau lebih tinggi mendukung objek MapFragment
sumber
Ini adalah cara Kotlin:
Di
fragment_map.xml
Anda harus memiliki:Di Anda,
MapFragment.kt
Anda harus memiliki:Sebut
setupMap()
dionCreateView
.sumber