前提・実現したいこと
AndroidStudioの新規プロジェクト作成からBottomNavigationView
を選択して、アプリを開発しています。
デフォルトで作成されている、「home・dashboard・notifications」に加えて「goal」というフラグメントを作成しようとしています。
ファイルの階層構造は以下になっています。
発生している問題・エラーメッセージ
ビルドすると以下のエラーが出ます
cannot inline bytecode built with jvm target 1.8 into bytecode that is being built with jvm target 1.6 please specify proper '-jvm-target' option
MainActivity.ktで、AppBarConfiguration
の部分が赤線になりエラーが表示されます。
val appBarConfiguration = AppBarConfiguration( setOf( R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications ) )
該当のソースコード
MainActivity.kt
kotlin
1package com.example.menu 2 3import android.os.Bundle 4import com.google.android.material.bottomnavigation.BottomNavigationView 5import androidx.appcompat.app.AppCompatActivity 6import androidx.navigation.findNavController 7import androidx.navigation.ui.AppBarConfiguration 8import androidx.navigation.ui.setupActionBarWithNavController 9import androidx.navigation.ui.setupWithNavController 10 11class MainActivity : AppCompatActivity() { 12 13 override fun onCreate(savedInstanceState: Bundle?) { 14 super.onCreate(savedInstanceState) 15 setContentView(R.layout.activity_main) 16 val navView: BottomNavigationView = findViewById(R.id.nav_view) 17 18 val navController = findNavController(R.id.nav_host_fragment) 19 // Passing each menu ID as a set of Ids because each 20 // menu should be considered as top level destinations. 21 val appBarConfiguration = AppBarConfiguration( 22 setOf( 23 R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications, R.id.navigation_goal 24 ) 25 ) 26 setupActionBarWithNavController(navController, appBarConfiguration) 27 navView.setupWithNavController(navController) 28 } 29} 30
デフォルトのdashboard
などと同様に、`app/java/com.example.menu/ui/'に「GoalFragment、GoalViewModel」というクラスを作成しました。
GoalFragment.kt
kotlin
1package com.example.menu.ui.goal 2 3import android.os.Bundle 4import android.view.LayoutInflater 5import android.view.View 6import android.view.ViewGroup 7import android.widget.TextView 8import androidx.fragment.app.Fragment 9import androidx.lifecycle.Observer 10import androidx.lifecycle.ViewModelProviders 11import com.example.menu.R 12 13class GoalFragment : Fragment() { 14 15 private lateinit var goalViewModel: GoalViewModel 16 17 override fun onCreateView( 18 inflater: LayoutInflater, 19 container: ViewGroup?, 20 savedInstanceState: Bundle? 21 ): View? { 22 goalViewModel = 23 ViewModelProviders.of(this).get(GoalViewModel::class.java) 24 val root = inflater.inflate(R.layout.fragment_goal, container, false) 25 val textView: TextView = root.findViewById(R.id.text_dashboard) 26 goalViewModel.text.observe(this, Observer { 27 textView.text = it 28 }) 29 return root 30 } 31}
GoalViewModel.kt
package com.example.menu.ui.goal import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel class GoalViewModel : ViewModel() { private val _text = MutableLiveData<String>().apply { value = "This is goal Fragment" } val text: LiveData<String> = _text }
試したこと
res
のxmlはエラーなどは出ておらず、フラグメントを作成する前に画面遷移ができない状態でエミュレータで起動できたアプリでは、新規作成したgoal
のアイコンがボトムナビゲーションバーに表示されていました。
val appBarConfiguration = AppBarConfiguration( setOf( R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications ) )
ではデフォルトの「home・dashboard・notification」しか規定されていないので、R.id.navigation_goal
を追記しようと考えましたが、import com.example.menu.R
がデフォルトのライブラリをインポートしているようで、GoalFragment.ktの
val textView: TextView = root.findViewById(R.id.text_dashboard)
のR.id.text_dashboard
をR.id.text_goal
とすると
Unresolved reference: text_goal
とエラーが出てしまうので、解決方法がわからない状態です。
ご回答を受けて修正し、エミュレータを起動した後のエラー
エミュレータは起動でき、デフォルトのフラグメントはクリックで選べるようになりましたが、
新規で作成した右端の「goal」フラグメントのアイコンをクリックするとアプリがシャットダウンされました。
logcat
2020-03-01 00:33:01.399 11218-11218/com.example.menu D/AndroidRuntime: Shutting down VM 2020-03-01 00:33:01.403 11218-11218/com.example.menu E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.menu, PID: 11218 java.lang.IllegalStateException: root.findViewById(R.id.text_dashboard) must not be null at com.example.menu.ui.goal.GoalFragment.onCreateView(GoalFragment.kt:25) at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698) at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187) at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224) at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997) at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953) at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849) at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413) at android.os.Handler.handleCallback(Handler.java:873) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6669) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 2020-03-01 00:33:01.432 11218-11218/com.example.menu I/Process: Sending signal. PID: 11218 SIG: 9
補足情報(FW/ツールのバージョンなど)
Android Studio 3.5.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/02/29 15:40
退会済みユーザー
2020/02/29 17:25