마 MaterialToolbar 야 니 머선 고민 있나 다른 사람들 다 쓰는 것처럼 썼는데 왜 에뮬레이터가 안 돌아가는데
MainActivity.kt
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var toolbar: MaterialToolbar
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
toolbar = findViewById(R.id.toolbar)
setToolbarListener()
}
...
}
toolbar = findViewById(R.id.toolbar) 이 라인만 쓰면 에뮬레이터가 먹통이 돼서 바인딩하는 과정에서 분명히 여기서 문제가 있을 거라고 생각하고 이틀을 여기만 뜯어보고 있었는데 문제는 다른 곳에 있었다
실제 원인은 툴바와 툴바를 include한 레이아웃에서 똑같은 id를 중복으로 사용했던 것이었다
toolbar 라는 아이디를 가진 개체가 두 개가 있으니 어떤 걸 찾아서 바인딩해야 할지 몰라서 cannot be cast 였던 것 같다
toolbar.xml
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.appbar.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:menu="@menu/menu_toolbar"
app:title="@string/app_name"
style="@style/Widget.MaterialComponents.Toolbar.Primary"/>
</com.google.android.material.appbar.AppBarLayout>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".MainActivity">
<include
android:id="@+id/toolbar"
layout="@layout/toolbar"/>
...
</androidx.constraintlayout.widget.ConstraintLayout>
변경 후
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".MainActivity">
<include
android:id="@+id/included_toolbar"
layout="@layout/toolbar"/>
...
</androidx.constraintlayout.widget.ConstraintLayout>
중복되지 않게 아이디를 변경해주고 실행시키니 정상적으로 작동한다