MvRx:Google地图和BottomNavigationView

时间:2018-09-27 16:27:05

标签: android android-fragments kotlin android-jetpack epoxy

我正在尝试使用MvRx在BottomNavigationView选项卡中设置google地图。

我要提问:

  1. 在MvRx中设置BottomNavigationView的最佳实践是什么?
  2. 使用下面的代码,我设法一次加载了地图,但是第二次我打开选项卡时,出现以下错误。因此,我想知道使用MvRx在BottomNavigationView片段中设置Google地图的推荐方法是什么?
  

原因:java.lang.IllegalArgumentException:二进制XML文件第7行:重复的ID 0x7f080089,标签null或父ID 0xffffffff与com.google.android.gms.maps.SupportMapFragment的另一个片段重复

我的片段如下:

class MapFragment : BaseFragment() {

    private val mViewModel: ChatViewModel by fragmentViewModel()

    override fun epoxyController() = simpleController(mViewModel) {state ->
        mapView{
            id("map")
        }
    }
}

然后查看:

@ModelView(autoLayout = ModelView.Size.MATCH_WIDTH_MATCH_HEIGHT)
class MapView @JvmOverloads constructor(
        context: Context,
        attrs: AttributeSet? = null,
        defStyleAttr: Int = 0
) : FrameLayout(context, attrs, defStyleAttr) {

    init {
        inflate(context, R.layout.fragment_map, this)
    }

}

地图片段(在第二次膨胀时崩溃)

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <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" />

</FrameLayout>

main_activity

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/coordinator_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


        <fragment
            android:id="@+id/my_nav_host_fragment"
            android:name="androidx.navigation.fragment.NavHostFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:defaultNavHost="true"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            app:navGraph="@navigation/nav_graph" />

        <android.support.design.widget.BottomNavigationView
            android:id="@+id/bottom_navigation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:background="@android:color/white"
            app:itemTextColor="@color/bottom_navigation_text"
            app:layout_behavior="android.support.design.behavior.HideBottomViewOnScrollBehavior"
            app:menu="@menu/bottom_navigation_main" />


</android.support.design.widget.CoordinatorLayout>

MainActivity

class MainActivity: BaseMvRxActivity() {

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

    private fun setupNavigation() {
        val navController = findNavController(R.id.my_nav_host_fragment)
        bottom_navigation.setupWithNavController(navController)
    }

    override fun onSupportNavigateUp() =
            findNavController(R.id.my_nav_host_fragment).navigateUp()

}

0 个答案:

没有答案