I get the Error in Android Studio
file:///C:/Users/{USERNAME}/AndroidStudioProjects/MyTable1/app/src/main/java/com/example/mytable1/MainActivity.kt:46:49
Unresolved reference: invalid_item_message
I’ve checked
main.xml
is in right place.(See following figure with textProject Structure
)- There exists an id
invalid_item_message
inmain.xml
. (See followingmain.xml
) - There is only one error in the project. Which also indicates that other id can be found. (See following code
MainActvitity.kt
)
The issue that confuses me is that
I don’t know why the error message Unresolved reference: invalid_item_message
appears
even if I have Invalidated Caches. (See following figure with text Invalidated Caches
)
Invalidated Caches
Appreciation
Any replies about this issue will be highly appreciated.
Notes
If you need other files in the project. Or don’t understand what I said. Welcome to reply.
Info
Here is my project structure of the project.
Project Structure
Here is the absolute full path of main.xml in the project.
C:Users{USERNAME}AndroidStudioProjectsMyTable1appsrcmainreslayoutmain.xml
MainActivity.kt
package com.example.mytable1
import android.icu.text.DateFormat
import android.icu.text.SimpleDateFormat
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.example.mytable1.ui.theme.MyTable1Theme
import java.util.Date
val TAG = "MainActivity"
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main);
findViewById<Button>(R.id.add_an_item_button)
.setOnClickListener {
val simpleDateFormat = SimpleDateFormat()
val input_raw_date = findViewById<EditText>(R.id.examination_date).getText().toString()
val input_item = findViewById<EditText>(R.id.examination_item).getText().toString()
val input_value = findViewById<EditText>(R.id.examination_value).getText().toString()
if(input_raw_date.length == 6 && isInteger(input_raw_date) == true){
val input_parsed_date = simpleDateFormat.parse(input_raw_date)
findViewById<TextView>(R.id.invalid_date_message).visibility = View.VISIBLE
}else{
findViewById<TextView>(R.id.invalid_date_message).visibility = View.INVISIBLE
}
if(input_item.length != 0 ) {
Log.d(TAG, "input_item:" + input_item)
findViewById<TextView>(R.id.invalid_item_message).visibility = View.VISIBLE
}else{
findViewById<TextView>(R.id.invalid_item_message).visibility = View.INVISIBLE
}
if(input_value.length != 0) {
Log.d(TAG, "input_value:" + input_value)
findViewById<TextView>(R.id.invalid_value_message).visibility = View.VISIBLE
}else{
findViewById<TextView>(R.id.invalid_value_message).visibility = View.INVISIBLE
}
}
}
}
fun isInteger(number : Any) : Boolean{
val integerChars = '0'..'9'
val s1 = number.toString()
var i=0;
for(i in 0..s1.length){
val c = s1[i]
if(c == null || c !in integerChars){
return false
}
}
return true
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:stretchColumns="1">
<TableRow>
<TextView
android:layout_column="1"
android:text="Date:"
android:padding="3dip" />
<EditText
android:id="@+id/examination_date"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="20200101"
android:inputType="date"
tools:ignore="TouchTargetSizeCheck" />
</TableRow>
<TableRow>
<TextView
android:layout_column="1"
android:text="Item:"
android:padding="3dip" />
<EditText
android:id="@+id/examination_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="item"
android:inputType="text"
tools:ignore="TouchTargetSizeCheck" />
</TableRow>
<TableRow>
<TextView
android:layout_column="1"
android:text="value:"
android:padding="3dip" />
<EditText
android:id="@+id/examination_value"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="0"
android:inputType="number"
tools:ignore="TouchTargetSizeCheck" />
</TableRow>
<Button
android:id="@+id/add_an_item_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add an item" />
<TextView
android:id="@+id/invalid_date_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="invalid date. please enter a date whose format is yyyymmdd (e.g. 20010101)"
android:inputType="none"
android:textSize="12sp"
android:textColor="@android:color/system_error_light"
android:visibility="invisible"
tools:ignore="TextFields,TouchTargetSizeCheck" />
<TextView
android:id="@+id/invalid_item_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="invalid date. please enter an item whose is NOT empty (e.g. item1)"
android:inputType="none"
android:textSize="12sp"
android:textColor="@android:color/system_error_light"
android:visibility="invisible"
tools:ignore="TouchTargetSizeCheck" />
<TextView
android:id="@+id/invalid_value_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="invalid date. please enter a nonnegative integer as value(e.g. 1)"
android:inputType="none"
android:textSize="12sp"
android:textColor="@android:color/system_error_light"
android:visibility="invisible"
tools:ignore="TouchTargetSizeCheck" />
</TableLayout>
Full file:
The zip file is available at Github
MyTable1 Project
I’ve checked
main.xml
is in right place.(See following figure with textProject Structure
)- There exists an id
invalid_item_message
inmain.xml
. (See followingmain.xml
) - There is only one error in the project. Which also indicates that other id can be found. (See following code
MainActvitity.kt
)
1th Edit
After I remove the tag where id is invalid_item_message
and comment two statements about invalid_item_message
(See following MainActivity.kt),
I restart the Android Studio by Invalidating Caches. (See following figure with text Invalidating Caches
)
Invalidating Caches
I’ll get an error message Unresolved reference: layout
file:///C:/Users/{USERNAME}/AndroidStudioProjects/MyTable1/app/src/main/java/com/example/mytable1/MainActivity.kt:28:26
Unresolved reference: layout
I don’t know why.
infos
main.xml
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:stretchColumns="1">
<TableRow>
<TextView
android:layout_column="1"
android:text="Date:"
android:padding="3dip" />
<EditText
android:id="@+id/examination_date"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="20200101"
android:inputType="date"
tools:ignore="TouchTargetSizeCheck" />
</TableRow>
<TableRow>
<TextView
android:layout_column="1"
android:text="Item:"
android:padding="3dip" />
<EditText
android:id="@+id/examination_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="item"
android:inputType="text"
tools:ignore="TouchTargetSizeCheck" />
</TableRow>
<TableRow>
<TextView
android:layout_column="1"
android:text="value:"
android:padding="3dip" />
<EditText
android:id="@+id/examination_value"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="0"
android:inputType="number"
tools:ignore="TouchTargetSizeCheck" />
</TableRow>
<Button
android:id="@+id/add_an_item_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add an item" />
<TextView
android:id="@+id/invalid_date_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="invalid date. please enter a date whose format is yyyymmdd (e.g. 20010101)"
android:inputType="none"
android:textSize="12sp"
android:textColor="@android:color/system_error_light"
android:visibility="invisible"
tools:ignore="TextFields,TouchTargetSizeCheck" />
<TextView
android:id="@+id/invalid_value_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="invalid date. please enter a nonnegative integer as value(e.g. 1)"
android:inputType="none"
android:textSize="12sp"
android:textColor="@android:color/system_error_light"
android:visibility="invisible"
tools:ignore="TouchTargetSizeCheck" />
</TableLayout>
MainActivity.kt
package com.example.mytable1
import android.icu.text.DateFormat
import android.icu.text.SimpleDateFormat
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.example.mytable1.ui.theme.MyTable1Theme
import java.util.Date
val TAG = "MainActivity"
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main);
findViewById<Button>(R.id.add_an_item_button)
.setOnClickListener {
val simpleDateFormat = SimpleDateFormat()
val input_raw_date = findViewById<EditText>(R.id.examination_date).getText().toString()
val input_item = findViewById<EditText>(R.id.examination_item).getText().toString()
val input_value = findViewById<EditText>(R.id.examination_value).getText().toString()
if(input_raw_date.length == 6 && isInteger(input_raw_date) == true){
val input_parsed_date = simpleDateFormat.parse(input_raw_date)
findViewById<TextView>(R.id.invalid_date_message).visibility = View.VISIBLE
}else{
findViewById<TextView>(R.id.invalid_date_message).visibility = View.INVISIBLE
}
if(input_item.length != 0 ) {
Log.d(TAG, "input_item:" + input_item)
//findViewById<TextView>(R.id.invalid_item_message).visibility = View.VISIBLE
}else{
//findViewById<TextView>(R.id.invalid_item_message).visibility = View.INVISIBLE
}
if(input_value.length != 0) {
Log.d(TAG, "input_value:" + input_value)
findViewById<TextView>(R.id.invalid_value_message).visibility = View.VISIBLE
}else{
findViewById<TextView>(R.id.invalid_value_message).visibility = View.INVISIBLE
}
}
}
}
fun isInteger(number : Any) : Boolean{
val integerChars = '0'..'9'
val s1 = number.toString()
var i=0;
for(i in 0..s1.length){
val c = s1[i]
if(c == null || c !in integerChars){
return false
}
}
return true
}
2th Edit
I remove the tags where id is in (invalid_date_message
,invalid_value_message
) in main.xml
. (See following main.xml
)
Then I comment these statements which are related to id I mentioned above.(See MainActivity.kt
)
Then I restart the Android Studio by Invalidating Cache. (See following figure with text Invalidating Cache)
Invalidating Cache
Then there are no errors.
Although it is a good thing, I wonder that why add these three tags in as the last element inside the root tag (i.e. <TableLayout>
) will cause error. (See main.xml
file in original and in 1th Edit.)
Appreciation
Any replies about this issue will be appreciated. Thank you very much readers.
infos
main.xml
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:stretchColumns="1">
<TableRow>
<TextView
android:layout_column="1"
android:text="Date:"
android:padding="3dip" />
<EditText
android:id="@+id/examination_date"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="20200101"
android:inputType="date"
tools:ignore="TouchTargetSizeCheck" />
</TableRow>
<TableRow>
<TextView
android:layout_column="1"
android:text="Item:"
android:padding="3dip" />
<EditText
android:id="@+id/examination_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="item"
android:inputType="text"
tools:ignore="TouchTargetSizeCheck" />
</TableRow>
<TableRow>
<TextView
android:layout_column="1"
android:text="value:"
android:padding="3dip" />
<EditText
android:id="@+id/examination_value"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="0"
android:inputType="number"
tools:ignore="TouchTargetSizeCheck" />
</TableRow>
<Button
android:id="@+id/add_an_item_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add an item" />
</TableLayout>
MainActivity.kt
package com.example.mytable1
import android.icu.text.DateFormat
import android.icu.text.SimpleDateFormat
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.example.mytable1.ui.theme.MyTable1Theme
import java.util.Date
val TAG = "MainActivity"
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main);
findViewById<Button>(R.id.add_an_item_button)
.setOnClickListener {
val simpleDateFormat = SimpleDateFormat()
val input_raw_date = findViewById<EditText>(R.id.examination_date).getText().toString()
val input_item = findViewById<EditText>(R.id.examination_item).getText().toString()
val input_value = findViewById<EditText>(R.id.examination_value).getText().toString()
if(input_raw_date.length == 6 && isInteger(input_raw_date) == true){
val input_parsed_date = simpleDateFormat.parse(input_raw_date)
//findViewById<TextView>(R.id.invalid_date_message).visibility = View.VISIBLE
}else{
//findViewById<TextView>(R.id.invalid_date_message).visibility = View.INVISIBLE
}
if(input_item.length != 0 ) {
Log.d(TAG, "input_item:" + input_item)
//findViewById<TextView>(R.id.invalid_item_message).visibility = View.VISIBLE
}else{
//findViewById<TextView>(R.id.invalid_item_message).visibility = View.INVISIBLE
}
if(input_value.length != 0) {
Log.d(TAG, "input_value:" + input_value)
//findViewById<TextView>(R.id.invalid_value_message).visibility = View.VISIBLE
}else{
//findViewById<TextView>(R.id.invalid_value_message).visibility = View.INVISIBLE
}
}
}
}
fun isInteger(number : Any) : Boolean{
val integerChars = '0'..'9'
val s1 = number.toString()
var i=0;
for(i in 0..s1.length){
val c = s1[i]
if(c == null || c !in integerChars){
return false
}
}
return true
}
3th Edit
I try to do some unit test.
I added a tag with id invalid_date_message
inside the root tag (i.e. ). (See following main.xml
.)
Then I uncomment these two statements which are related to id I mentioned above. (See following MainActivity.kt
.)
Then I restart the Android Studio by Invalidating cache. (See following figure of Invalidating cache)
Invalidating cache
Then there are no errors.
I’m very curious why NO errors (although it is a good thing for me).
infos
main.xml
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:stretchColumns="1">
<TableRow>
<TextView
android:layout_column="1"
android:text="Date:"
android:padding="3dip" />
<EditText
android:id="@+id/examination_date"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="20200101"
android:inputType="date"
tools:ignore="TouchTargetSizeCheck" />
</TableRow>
<TableRow>
<TextView
android:layout_column="1"
android:text="Item:"
android:padding="3dip" />
<EditText
android:id="@+id/examination_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="item"
android:inputType="text"
tools:ignore="TouchTargetSizeCheck" />
</TableRow>
<TableRow>
<TextView
android:layout_column="1"
android:text="value:"
android:padding="3dip" />
<EditText
android:id="@+id/examination_value"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="0"
android:inputType="number"
tools:ignore="TouchTargetSizeCheck" />
</TableRow>
<Button
android:id="@+id/add_an_item_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add an item" />
<TextView
android:id="@+id/invalid_date_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="invalid date. please enter a date whose format is yyyymmdd (e.g. 20010101)"
android:inputType="none"
android:textSize="12sp"
android:textColor="@android:color/system_error_light"
android:visibility="invisible"
tools:ignore="TextFields,TouchTargetSizeCheck" />
</TableLayout>
MainActivity.kt
package com.example.mytable1
import android.icu.text.DateFormat
import android.icu.text.SimpleDateFormat
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.example.mytable1.ui.theme.MyTable1Theme
import java.util.Date
val TAG = "MainActivity"
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main);
findViewById<Button>(R.id.add_an_item_button)
.setOnClickListener {
val simpleDateFormat = SimpleDateFormat()
val input_raw_date = findViewById<EditText>(R.id.examination_date).getText().toString()
val input_item = findViewById<EditText>(R.id.examination_item).getText().toString()
val input_value = findViewById<EditText>(R.id.examination_value).getText().toString()
if(input_raw_date.length == 6 && isInteger(input_raw_date) == true){
val input_parsed_date = simpleDateFormat.parse(input_raw_date)
findViewById<TextView>(R.id.invalid_date_message).visibility = View.VISIBLE
}else{
findViewById<TextView>(R.id.invalid_date_message).visibility = View.INVISIBLE
}
if(input_item.length != 0 ) {
Log.d(TAG, "input_item:" + input_item)
//findViewById<TextView>(R.id.invalid_item_message).visibility = View.VISIBLE
}else{
//findViewById<TextView>(R.id.invalid_item_message).visibility = View.INVISIBLE
}
if(input_value.length != 0) {
Log.d(TAG, "input_value:" + input_value)
//findViewById<TextView>(R.id.invalid_value_message).visibility = View.VISIBLE
}else{
//findViewById<TextView>(R.id.invalid_value_message).visibility = View.INVISIBLE
}
}
}
}
fun isInteger(number : Any) : Boolean{
val integerChars = '0'..'9'
val s1 = number.toString()
var i=0;
for(i in 0..s1.length){
val c = s1[i]
if(c == null || c !in integerChars){
return false
}
}
return true
}
4th Edit
I did the same thing as in 3th Edit with id invalid_item_message
.
There are still no errors.
4th Edit
I did the same thing as in 3th Edit with id invalid_value_message
.
There are still no errors.
What a relief.