質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.42%
Android

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

Android Studio

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

Kotlin

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

Q&A

解決済

2回答

11056閲覧

importしているにも関わらず、Unresolved referenceというエラーが出て、推奨されている解決方法を一通り行ったものの、解決しない

Tig3

総合スコア6

Android

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

Android Studio

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

Kotlin

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

0グッド

0クリップ

投稿2019/09/04 11:29

前提・実現したいこと

【Androidアプリ開発 vol.08】割勘計算アプリ③ アプリ完成!MainActivity.ktのプログラミング!
上記URL通りに電卓アプリを作りたい。

activity_main.xmlのTextViewに新たなid(myText)を設定した際に、以下のエラーメッセージが発生しました。

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

エラーメッセージ G:\MyApplication3\app\src\main\java\com\example\myapplication\MainActivity.kt: (5, 23): Unresolved reference: myText

該当のソースコード

MainActivity.kt

Kotlin

1package com.example.myapplication 2 3import androidx.appcompat.app.AppCompatActivity 4import android.os.Bundle 5import android.widget.myText 6 7class MainActivity : AppCompatActivity() { 8 9 override fun onCreate(savedInstanceState: Bundle?) { 10 super.onCreate(savedInstanceState) 11 setContentView(R.layout.activity_main) 12 val myText = findViewById(R.id.myText) 13 } 14} 15

activity_main.xml

xml

1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 tools:context=".MainActivity"> 8 9 <TextView 10 android:id="@+id/myText" 11 android:layout_width="wrap_content" 12 android:layout_height="wrap_content" 13 android:text="Hello World!" 14 app:layout_constraintBottom_toBottomOf="parent" 15 app:layout_constraintLeft_toLeftOf="parent" 16 app:layout_constraintRight_toRightOf="parent" 17 app:layout_constraintTop_toTopOf="parent" /> 18 19</androidx.constraintlayout.widget.ConstraintLayout>

試したこと

上記URL通りの順番で入力するとエラー(エラーが起きる自体は予定通り?な用なのですが・・・)
私の環境で行うと、青いメッセージは表示されず自動でimportされているようです。
しかし、Unresolved referenceが、新たなid(myText)だけでなくactivity_main.xmlまでも起きます。
調べたところ、activity_main.xmlにエラーがあると関連ファイルがビルドされないため起こるとあったので、一通り推奨されている対策を行いました。
それにも関わらずエラーが出続けています。
具体的には、
0. activity_main.xmlを上記コードの状態で、上書き保存
0. プロジェクトをクリーン
0. プロジェクトの再ビルド
0. キャッシュの破棄、再起動
0. Gradleファイルとプロジェクトの同期
0. ファイルシステムとの同期
0. Androidstudioの再起動
を行いましたが解決しませんでした。

因みに
0. 作成の順番を変え、手動で新たに作成したidをimport
xmlで作ってエラーが出るならktを先に作ればエラーが出ないはずだと考え順番を入れ替え手動でimportしました。
結果、activity_main.xmlはUnresolved referenceが出なくなりましたが、myTextにはエラーが出ました。
0. 再度キャッシュの破棄、再起動
解決せず

最初からアクティビティを作成し、何も手を加えない場合はエラーは出ません。
また、activity_main.xmlを操作しない場合も同様です。

しかし、必ず新たにコンポーネントを何か追加しようとすると同じようなエラーが出ます。
このままだとHalloWorldのテキストの中身を変えるぐらいのことしかできません助けてください。
それに、activity_main.xmlが参照されない時にいちいち再起動してたらいつまで立ってもアプリが作れないです。
根本的に何か間違っている気がします。

補足情報(FW/ツールのバージョンなど)

Android Studio 3.5(Paladiceによる日本語化済)
Build #AI-191.8026.42.35.5791312, built on August 9, 2019
JRE: 1.8.0_202-release-1483-b03 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 10 10.0

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

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

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

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

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

guest

回答2

0

リンク先のサイトを見てみると、コードはJavaで書かれています。質問の内容を見ると、それほどJavaでの経験があるわけでもないようですので、Javaで書かれた説明からいきなりKotlinでの実装をやってみるというのはまだハードルが高いのではないでしょうか。

Kotlinで実装したいとしても、まずは、このサイトの通りJavaで実装してみて動くのを確認してみてから、Android Studioの機能を使ってKotlinに変換してみれば、Kotlinではどう書いたらいいのかわかります。また、お勧めされる書き換えをしてみたらどんな書き方になるかなどについて勉強してみるなどされるのが結局は近道なのではないかと思います。

もしくは、まだ数は多くはありませんが、Kotlinで書いてある説明サイトを参考にするのがいいと思います。

投稿2019/09/04 16:23

TakaiY

総合スコア13147

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

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

TakaiY

2019/09/04 16:34

ふと思って、リンクの内容でなくて、表示されているテキストで検索してみると以下のサイトがヒットしました。 http://kuneoresearch.com/android-appdev08-waricalc03/ こちらの内容を見ると、ちゃんとKotlinで実装されていますし、最終的なソースも出ているので、自分のコードをよく見くらべてみると問題点がわかるのではないでしょうか。
Tig3

2019/09/05 11:24

最終的なソースを確認せず、途中まで読んだところでエラーになってパニックになっていました。 今度はエラーが出ても最終的なソースを自分のコードを比較して確認したいと思います。 JAVAなどのプログラム言語の知識も中途半端なのでもうちょっと勉強したいです。 Kotlinの方が簡単というかクラスの書き方が簡潔でいいなあと思って手を出しましたが、ネットにはまだKotlin関係の入門サイトは全然ないなあという印象です。 JAVAで入門サイトを一通りこなしてからKotlinで実装したいと思います。 回答ありがとうございました。
guest

0

ベストアンサー

kotlin

1import android.widget.myText

上記のimportは

  1. 作成の順番を変え、手動で新たに作成したidをimport

によるものなのでしょうか?

KotlinによるAndroidプログラミングでは、Kotlin Android Extensionsという拡張機能を用いて、コンポーネントに与えたID名をコード中に直接記述することでそのコンポーネントを操作することができますが、それを用いようとしていたのならば、用法が誤っています。

Extensionsを使わないのならば、

kotlin

1package com.example.myapplication 2 3import androidx.appcompat.app.AppCompatActivity 4import android.widget.TextView 5import android.os.Bundle 6 7class MainActivity : AppCompatActivity() { 8 9 override fun onCreate(savedInstanceState: Bundle?) { 10 super.onCreate(savedInstanceState) 11 setContentView(R.layout.activity_main) 12 val myText = findViewById<TextView>(R.id.myText) 13 myText.text = "hogehoge" 14 } 15}

のように記述すればいいでしょう。ここではval myTextとしていますが、このmyTextは単なる変数名なので、ID名と一致させる必要はありません。

Extensionsを使うのならば、

kotlin

1package com.example.myapplication 2 3import androidx.appcompat.app.AppCompatActivity 4import android.os.Bundle 5import kotlinx.android.synthetic.main.activity_main.* 6 7class MainActivity : AppCompatActivity() { 8 9 override fun onCreate(savedInstanceState: Bundle?) { 10 super.onCreate(savedInstanceState) 11 setContentView(R.layout.activity_main) 12 myText.text = "hogehoge" 13 } 14}

のようにします。3つ目のimport文によって拡張機能による参照が可能になり、ID名で直接TextViewを操作できます。ID名であるmyTextとだけ入力して赤字表示されているときに、その部分にカーソルを移動してAlt+Enterキーを入力することで、当該import文が挿入されるはずです。

投稿2019/09/04 12:12

編集2019/09/04 14:49
keicha_hrs

総合スコア6768

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

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

Tig3

2019/09/05 11:18

1. 作成の順番を変え、手動で新たに作成したidをimport そうです。すみません、説明不足でした。 Kotlin Android Extensionsなんて便利なものがあったのですね、初めて知りました、ありがとうございます! 検索すれば出てくるといってもそもそも何も知らないと検索すらできませんからね・・・いずれ使いこなしたいです。 2通りコードをかいて下さりありがとうございます。 自分のコードと見比べることで、正しい構造を知ることができました。 拡張機能を使わない場合で、直すところを日本語にすると、 import android.widget.「xmlの<〇〇〇」 val 変数 = findViewById<「xmlの<〇〇〇」>(R.id.「idの名前」) 「xmlの<〇〇〇」.text = "入れたい文字" みたいな理解でいいんですよね。 兎も角、丁寧な解説ありがとうございました!
keicha_hrs

2019/09/05 12:36

いや、間違っていますよ。 import android.widget.xxx のxxxの部分に記述できるのは、あくまでAndroid SDKが提供しているクラス名だけです。私が1番目のコードで示した例でも、「Android SDKが提供しているTextVIewというクラス」をimportしています。ここに自分がXMLに記述した任意の名前を入れることはできません。ここに拘っているからおかしな理解になるのではないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.42%

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

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

質問する

関連した質問