【问题标题】:Google maps in a tabbar fragment. Kotlin谷歌地图在标签栏片段中。科特林
【发布时间】:2019-07-09 15:32:36
【问题描述】:

我的项目有一个标签栏,每个标签栏显示一个不同的片段。 其中一个是一个片段,它带有另一个来自谷歌地图的片段,我找不到让它工作的方法。 主要错误(显然)是

this.childFragmentManager.findFragmentById(R.id.map) 为 支持地图片段

返回空值。

我的代码是这样的。

有地图的片段

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()
    }
}

希望你能帮助我,我真的不知道该怎么办。 谢谢!

【问题讨论】:

标签: android google-maps kotlin


【解决方案1】:

在这行代码中去掉this.

旧:

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

新:

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

【讨论】:

  • 虽然这可能会回答这个问题,但如果您要在edit 回答您的答案,包括对如何回答问题的一些解释,将会很有帮助。这使您的答案对以后可能遇到相同答案的人更有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2017-08-16
  • 1970-01-01
  • 2015-12-20
  • 2020-04-10
  • 1970-01-01
  • 2013-11-04
相关资源
最近更新 更多