Карты Google в фрагменте вкладки.Котлин - PullRequest
0 голосов
/ 15 февраля 2019

В моем проекте есть вкладка, каждый из которых показывает свой фрагмент.Одним из них является фрагмент, который несет другой из карт Google, и я не могу найти способ заставить его работать.Основная ошибка (очевидно) заключается в том, что

this.childFragmentManager.findFragmentById (R.id.map) в виде SupportMapFragment

возвращает ноль.

Myкод такой.

Фрагмент с картой

class SpotListFragment : SupportMapFragment(), OnMapReadyCallback {

    private lateinit var mMap: GoogleMap
    lateinit var api : Api
    lateinit var localStorage: LocalStorage

    override fun onMapReady(googleMap: GoogleMap) {
        mMap = googleMap

        // Add a marker in Sydney and move the camera
        val sydney = LatLng(-34.0, 151.0)
        mMap.addMarker(MarkerOptions().position(sydney).title("Marker in Sydney"))
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney))
    }



    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {


        val view: View = inflater!!.inflate(R.layout.fragment_spot_list, container, false)

        view.borrarToken.setOnClickListener {
            this.localStorage.deleteAll()
            val intent = Intent(activity?.applicationContext!!, LoginActivity::class.java)
            startActivity(intent)
        }
        val mapFragment = this.childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment
        mapFragment.getMapAsync(this)
        return view
    }

Фрагмент xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:design="http://schemas.android.com/apk/res-auto"
    tools:context=".Fragments.SpotListFragment"
    android:orientation="vertical"
    android:background="@color/white">


    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
         />

    <Button
        android:id="@+id/borrarToken"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Borrar token"/>


    <ListView
        android:layout_gravity="bottom|center"

        android:id="@+id/spotsListView"
        android:layout_width="match_parent"
        android:layout_height="245dp"
        android:paddingBottom="60dp"
        android:textColor="@color/black"
        />
</FrameLayout>

активность на вкладке.

class MainNavActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val spotListFragment = SpotListFragment.newInstance()
        openFragment(spotListFragment)

        navigationView.setOnNavigationItemSelectedListener {
            when(it.itemId) {
                R.id.spotsListNav -> {
                    val spotListFragment = SpotListFragment.newInstance()
                    openFragment(spotListFragment)
                    true
                }
                R.id.searchNav -> {
                    true

                }
                R.id.createSpotNav -> {
                    val createSpotFragment = CreateSpotFragment.newInstance()
                    openFragment(createSpotFragment)
                    true

                }
                R.id.feedNav -> {
                    true

                }
                R.id.profileNav -> {
                    true

                }
                else -> {
                    false
                }
            }
        }

    }

    private fun openFragment(fragment: Fragment) {
        val transaction = supportFragmentManager.beginTransaction()
        transaction.replace(R.id.container, fragment)
        transaction.addToBackStack(null)
        transaction.commit()
    }
}

Я хочуВы можете помочь мне, я действительно не знаю, что делать.Спасибо!

1 Ответ

0 голосов
/ 02 июля 2019

Избавьтесь от this. в этой строке кода:

old:

val mapFragment = this.childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment

new:

val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...