🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

1395閲覧

Type mismatchとUnresolves referenceのエラーが出て何が原因かわかりません

nishino.michiya

総合スコア14

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2021/02/03 06:51

前提・実現したいこと

Kotlinの勉強を始めてまだ1週間で【はじめてのAndroidプログラミング】という参考書に書かれているコード書きながら学んでいます。

現在は参考書の動物図鑑アプリを作成している途中でエラーが起きました。
参考書通りに記載しているのに、エラーが起きました。
何かのエラーが違う可能性もあるのかなと思ったのですが、よくわからずです。
そのため、このエラーを解決したいです。

発生している問題・エラーメッセージ

SubActivity.ktの38行目でType mismatchのエラーが起きました。
title = TitleFragment()のTitleFragmentの下に赤い波線が付いています。

Type mismatch: inferred type is TitleFragment but CharSequence! was expected

SubActivity.ktの47行目でUnresolves referenceのエラーが起きました
title.setTitle("サブ画面")のsetTitleの文字が赤くなっています。

Unresolved reference: setTitle

該当のソースコード

SubActivity.kt

Kotlin

1package com.example.animalbook 2 3import androidx.appcompat.app.AppCompatActivity 4import android.os.Bundle 5import com.example.animalbook.databinding.ActivitySubBinding 6 7class SubActivity : AppCompatActivity() { 8 private lateinit var binding: ActivitySubBinding 9 private lateinit var titile: TitleFragment 10 override fun onCreate(savedInstanceState: Bundle?) { 11 super.onCreate(savedInstanceState) 12 binding = ActivitySubBinding.inflate(layoutInflater) 13 setContentView(binding.root) 14 15 binding.lionButton.setOnClickListener{ 16 supportFragmentManager.beginTransaction().apply { 17 replace(R.id.container,LionFragment()) 18 addToBackStack(null) 19 commit() 20 } 21 } 22 23 binding.hippoButton.setOnClickListener{ 24 supportFragmentManager.beginTransaction().apply { 25 replace(R.id.container,HippoFragment()) 26 addToBackStack(null) 27 commit() 28 } 29 } 30 31 binding.giraffeButton.setOnClickListener{ 32 supportFragmentManager.beginTransaction().apply { 33 replace(R.id.container,GiraffeFragment()) 34 addToBackStack(null) 35 commit() 36 } 37 } 38 title = TitleFragment() 39 supportFragmentManager.beginTransaction().apply { 40 replace(R.id.titleFragment,titile) 41 commit() 42 } 43 } 44 45 override fun onResume() { 46 super.onResume() 47 title.setTitle("サブ画面") 48 } 49} 50

build.gradle

apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' android { compileSdkVersion 29 buildToolsVersion "30.0.2" defaultConfig { applicationId "com.example.animalbook" minSdkVersion 19 targetSdkVersion 29 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" buildFeatures{ viewBinding = true } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation 'androidx.core:core-ktx:1.3.2' implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'androidx.legacy:legacy-support-v4:1.0.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' }

試したこと

色々調べてみて、どんなエラーなのかは理解しましたが、何をやっていいかわからず何も試しておりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

変数名にスペルミスがあります。titiletitle に直したら動くと思います。

Kotlin

1 private lateinit var titile: TitleFragment

Kotlin

1 replace(R.id.titleFragment,titile)

これがエラーになっていた理由ですが、もともと Activity には title という文字列型のプロパティがあって、そこに TitleFragment 型のオブジェクトを代入しようとしてエラーになってました。
上記のスペルミスを修正することで、title プロパティは TitleFragment 型のものでオーバーライドされるため、期待通りに動くようになるはずです。

Kotlin

1 title = TitleFragment()

投稿2021/02/03 07:15

hoshi-takanori

総合スコア7899

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nishino.michiya

2021/02/03 13:15

ご回答ありがとうございます。 確かにスペルミスでした。 指摘されたところを直したらしっかり動きました。 大変お恥ずかしいミスでした。すごく助かりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問