!!请注意!! 在调用setContentView()方法时不会发生错误。在搜索答案的过程中,我发现有人在这里发布了完全相同的问题(完全相同的代码可能与完全相同的教程源和所有内容),但它被标记为重复并错误地指向一个帖子,其中问题是不匹配类型在setContentView()方法而不是findViewByID(),解决方案是改变" R.id.activity_main" to" R.layout.activity_main",但这不是这里的情况。为了记录,我尝试了,但它只是将错误信息更改为"嘿,这需要是' id'"!
===问题===
目前我的代码中只有2个错误都指向不同方法中的相同语句
RelativeLayout bgElement = findViewById(R.id.activity_main);
其中activity_main为红色且带有消息"无法解析符号' activity_main'""
清理和重建编译错误时:错误:
cannot find symbol variable activity_main
这是我的第一个Android编程项目,我也从未使用过xml,所以请慢谈并使用小字。大声笑
===研究/擅自修复===
1)导入android.R从未出现在我的代码中
2)清洁和重建不能解决问题。 (每次尝试修理后我都会清理并重建)
3)以下示例代码在Android Studio警告的方法调用前面进行了类型转换,因此我删除了它。然后有一篇文章建议铸造是必要的,所以我尝试将其添加回来。当铸件存在而不存在时,错误仍然存在。
4)有人说在重建之前尝试删除R文件,但是没有R.java,他们说这是 - 也许它指的是旧版Android Studio?
=== JAVA CODE ===
package com.example.app1redbluelight;
import android.support.v7.app.AppCompatActivity;
import android.widget.RelativeLayout;
import android.widget.Button;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RelativeLayout bgElement = /*(RelativeLayout)*/findViewById(R.id.activity_main);
bgElement.setBackgroundColor(Color.WHITE);
myButtonListenerMethod();
}
public void myButtonListenerMethod() {
button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RelativeLayout bgElement = /*(RelativeLayout)*/findViewById(R.id.activity_main);
int color = ((ColorDrawable) bgElement.getBackground()).getColor();
if (color == Color.RED)
bgElement.setBackgroundColor(Color.BLUE);
else
bgElement.setBackgroundColor(Color.RED);
}
});
}
}
=== XML文件===
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="148dp"
android:layout_marginStart="148dp"
android:text="Button"
app:layout_constraintStart_toStartOf="parent"
tools:layout_editor_absoluteY="231dp" />
</android.support.constraint.ConstraintLayout>
答案 0 :(得分:2)
在Android中,该功能 findViewById()会返回与该布局中的ID对应的视图。
在您的代码中, setContentView(R.layout.activity_main); 设置主要活动的布局。
此时,findViewById()在activity_main布局中查找视图
因此无法解析activity_main布局中的“activity_main”
如果您需要获取activity_main的布局,请尝试以下操作。
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ConstraintLayout bgElement = (ConstraintLayout)inflater.inflate(R.layout.activity_main, null);
如果需要在activity_main.xml中获取布局,则需要设置布局的ID。 ( android:id =“@ + id / activity_main”必须添加。)
请参阅以下内容。
<android.support.constraint.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"
android:id = "@+id/activity_main"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="148dp"
android:layout_marginStart="148dp"
android:text="Button"
app:layout_constraintStart_toStartOf="parent"
tools:layout_editor_absoluteY="231dp" />
</android.support.constraint.ConstraintLayout>
答案 1 :(得分:1)
您正在尝试查找xml文件中不存在的布局:
RelativeLayout bgElement = /*(RelativeLayout)*/findViewById(R.id.activity_main);
xml文件中的任何元素都没有id“activity_main”,你的xml中也没有RelativeLayout。
大多数情况下,错误来自缺少id设置为activity_main的元素。
我想你想要改变整个屏幕的背景颜色,所以在ConstraintLayout中添加一个id:
<android.support.constraint.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"
android:id="@+id/activity_main"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="148dp"
android:layout_marginStart="148dp"
android:text="Button"
app:layout_constraintStart_toStartOf="parent"
tools:layout_editor_absoluteY="231dp" />
</android.support.constraint.ConstraintLayout>
然后更改代码以使用它:
ConstraintLayout bgElement = /*(ConstraintLayout)*/findViewById(R.id.activity_main);
答案 2 :(得分:0)
问题是由这些原因造成的
1 :没有名为&#34; activity_main&#34;在附加的xml中
findViewbyId()在该xml文件中查找View,因为您将activity_main.xml设置为MainActivity。
2 :xml内容中没有RelativeLayout项。
<强>修正强>
尝试添加ID,&#34; activity_main&#34;到ConstraintLayout,
或尝试使用LayoutInflator。
答案 3 :(得分:0)
发现以这种方式调用activity_main并不理想,并且由于约束布局而导致应用程序崩溃。
插入新的水平布局,然后引用该布局以更改背景颜色。 Android似乎不喜欢尝试以这种方式过多更改约束层的变量。
希望这会有所帮助