在Android Studio教程中找不到符号错误?

时间:2015-10-09 01:52:05

标签: java android

https://developer.android.com/training/basics/firstapp/building-ui.html#Weight

我正在做上面的教程并且要进行构建我必须在src文件夹内的MainActivity.java中注释掉这些行(这段代码在OnCreate()内的MainActivity类中。)

//        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
//        setSupportActionBar(toolbar);
//
//        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
//        fab.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
//                        .setAction("Action", null).show();
//            }
//        });

如果我没有注释掉这些行,我会发现'找不到'错误而无法构建,例如:

错误:找不到符号变量工具栏

有人能用简单的英语解释为什么会发生这种情况以及如何解决这个问题?我已经尝试了各种import.R修复程序,人们发现与Eclipse进行对抗随机添加,但它们不起作用。我的进口商品:

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;

我正在使用Android Studio,就像教程所说的那样,在干净安装时会遇到同样的错误。这是我自动生成的导入吗?教程是否错误或与最新的Android Studio不兼容?我的构建设置错了吗?

3 个答案:

答案 0 :(得分:9)

R类是根据*.xml文件中的内容自动生成的,无论它们是字符串,尺寸,颜色,布局内的ID等等。

当你调用这样的代码时:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

您说,“将工具栏变量设置为ID为toolbar”的窗口小部件。

在xml中,假设您有三个这样的文本视图:

<TextView android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/text_view_1" />
<TextView android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/text_view_2" />
<TextView android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/text_view_3"  />

当我构建项目时,我的R.java文件将被更新为在java代码中引用我在xml中定义的id,如下所示:

    public static final int text_view_1=0x7f0c0066;
    public static final int text_view_2=0x7f0c0067;
    public static final int text_view_3=0x7f0c0068;

为了在最基本的层面上解释它,R.java文件是生成的java代码,用于引用实际java代码中的xml元素。

我猜测当你在Android Studio中创建一个项目时,它带有MainActivity.java类。那就是代码来自你上面发布的代码。默认MainActivity.java类中正上方的部分是

setContentView(R.layout.activity_main);

这是将activity的视图设置为activity_main.xml中定义的xml布局文件。这个布局的内部是以下

<强> activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    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:fitsSystemWindows="true"
    tools:context=".MainActivity">

    <android.support.design.widget.AppBarLayout 
        android:layout_height="wrap_content"
        android:layout_width="match_parent" 
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar android:id="@+id/toolbar"
                android:layout_width="match_parent" 
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"         
                android:theme="@style/AppTheme.AppBarOverlay"
                app:popupTheme="@style/AppTheme.PopupOverlay" />
    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_main" />

    <android.support.design.widget.FloatingActionButton 
        android:id="@+id/fab"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_gravity="end|bottom" 
        android:layout_margin="@dimen/fab_margin"
        android:src="@android:drawable/ic_dialog_email" />

</android.support.design.widget.CoordinatorLayout>

我的猜测是,您的activity_main.xml可能不包含ToolbarFloatingActionButton小部件的此定义。

如果你想真正从头开始,以便你可以按照你链接的教程,你应该删除MainActivity.java,然后去创建你自己的。

答案 1 :(得分:4)

我知道这已经过时了,但我会回答,因为这个教程仍然是Android工作室的最佳选择,并且很难解释这一部分。

OnCreate()创建您在Java中用XML定义的元素,通过创建默认活动,您仍然有

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

fab.setOnClickListener(new View.OnClickListener()

在OnCreate中定义,android工作室没有在android.R中创建这些资源,因为你删除了XML中的定义作为教程的一部分!

答案 2 :(得分:1)

在Android Studio上运行&gt; Clean and Rerun'app'或ctrl + F5