R无法解析为变量

时间:2012-12-01 18:57:35

标签: android

我已经阅读了其他解决方案。没有import.filename.R,我的所有.xml标题都是小写,我已经清理了项目。我尝试重新创建它,但没有一个有效。我文件中的所有“R.”都是错误的,无法解析为变量。我有五个不同的XML文件,所以我只展示其中几个,然后是java:

activity_main:     

<TextView
    android:id="@+id/categoryTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="30dp"
    android:layout_marginTop="22dp"
    android:text="@string/cat" />

<RadioGroup
    android:id="@+id/radioGroup1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/categoryTextView"
    android:layout_below="@+id/categoryTextView"
    android:layout_marginTop="14dp" >

    <RadioButton
        android:id="@+id/bkRadio"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true"
        android:text="@string/bekind" />

    <RadioButton
        android:id="@+id/oldmcRadio"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/oldmc" />


</RadioGroup>

<Button
    android:id="@+id/chooseButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/radioGroup1"
    android:layout_below="@+id/radioGroup1"
    android:layout_marginTop="18dp"
    android:text="@string/choose"
    android:onClick="buttonclick" />

</RelativeLayout>

bekindwords:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
    android:id="@+id/nounKindTextView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/noun" />

<EditText
    android:id="@+id/nounKindEditText1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="text"
    android:ems="10" />

<TextView
    android:id="@+id/nounpKindTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/nounp" />

<EditText
    android:id="@+id/nounpKindEditText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="text"
    android:ems="10" />

<TextView
    android:id="@+id/nounKindTextView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/noun" />

<EditText
    android:id="@+id/nounKindEditText2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="text"
    android:ems="10" />

   <TextView
    android:id="@+id/placeKindTextView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/place" />

<EditText
    android:id="@+id/placeKindEditText2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="text"
    android:ems="10" />

<TextView
    android:id="@+id/adjKindTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/adj" />

<EditText
    android:id="@+id/@+id/adjKindEditText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="text"
    android:ems="10" />

<TextView
    android:id="@+id/nounKindTextView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/noun" />

<EditText
    android:id="@+id/nounKindEditText3"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="text"
    android:ems="10" />

<Button
    android:id="@+id/enterButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="buttonclick2"
    android:text="@string/ent" />

</LinearLayout>

爪哇:

package com.deitel.madlibs;

import android.os.Bundle;
import android.app.Activity;
import android.widget.*;
import android.view.View;
import android.view.Menu;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.EditText;
import android.widget.TextView;


public class MainActivity extends Activity {
//Global variable
    double bk;
    double oldmc;
    private Button choose;  // creates a button 

        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        choose = (Button) findViewById(R.id.chooseButton);

        //Start with first screen
        setContentView(R.layout.activity_main);
    }

  //buttonclick for form 1
    public void buttonclick(View view){

        RadioButton bk = (RadioButton) findViewById(R.id.bkRadio);
        RadioButton oldmc = (RadioButton) findViewById(R.id.oldmcRadio); 

         if(bk.isChecked())
        {
            //switch views to screen 2
               setContentView(R.layout.bekindwords);  
        }
   else if(oldmc.isChecked())
        {
           //switch views to screen 3
           setContentView(R.layout.mcdwords);
        }}

    // buttonclick for bekindwords
         public void buttonclick2(View view){
                setContentView(R.layout.bekindadlib);
         }
    // buttonclick for mcdwords
         public void buttonclick3(View view){
                    setContentView(R.layout.mcdadlib);
         }

} 

4 个答案:

答案 0 :(得分:2)

我实际上今天刚刚遇到这个问题,并且在最后一个小时左右一直困扰着我。在我的代码中花了一些时间,但最终我找到了问题。在我第一次创建项目的早期,Eclipse添加了一个空白活动和一些基本资源。创建的资源之一是一个奇怪的menu.xml文件,它引用了我在创建项目时最初删除的字符串。由于XML布局文件中的问题阻止了应用程序的构建,我只是在字符串XML值文件中重新添加了被调用的字符串。

因此,我在解决问题时学到的教训是,如果您的R文件没有生成存在问题,那么可能是由于XML文件中的某些问题阻止了您的应用程序的构建。

答案 1 :(得分:1)

尝试导入com.deitel.madlibs.R,清除,删除导入。 当我在R上发生日食时,我会做一些接近它的事情,尽管可能不是那样。

答案 2 :(得分:0)

是否产生了R?如果没有,您的资源文件可能有问题。修复它们,然后做一个干净的项目。

答案 3 :(得分:0)

我在(forlorn)希望其他有资源类问题的人可能会发现这一点。

  

android.R

,或

  

your.packagename.com.R

当AAPT编译您的应用程序时,它会生成R.java。您可以在项目结构根目录下的gen文件夹中看到它。它只是定义了一系列引用项目资源的public static final int,例如drawables,strings,layout views等,以便您可以使用名称在代码中引用它们。

因此,R.java只是一个类,就像任何其他Java类一样。 java文件与您使用的所有其他类一起编译到您的应用程序中。

反过来,它具有每种资源类型的内部类。例如:

package com.company.example

public final class R {

    public static final class drawable {
        public static final int icon=0x7f020005;   
    } 
}

在这里,我的drawables中有一个名为'icon'的图标。在我的代码中,我可以使用findViewById(R.drawable.icon)

再看一下上面的代码,很明显发生了什么。它编译为findViewById(0x7f020005);

问题的发生是因为任何数量的事情都可能导致R.java的生成失败,最常见的是布局XML中的错误。由于未生成R.java,因此编译应用程序时,编译器会尝试解析对R的引用。

再次考虑findViewById(R.drawable.icon)。您的R.java尚未生成,但Android在android.R处有默认资源类。编译器将帮助(或不)为您解析引用,并将android.R添加到您的导入。然后它尝试编译findViewById(R.drawable.icon),这实际上是findViewById(android.R.drawable.icon),并且因为默认的Android类没有drawable.icon,所以编译失败。

要修复它,只需要两件事。

  1. 从导入中删除android.R
  2. 查找并修复导致R.java生成失败的问题
  3. 根据我的经验,布局XML中的XML错误并不总是在IDE中正确显示。当我遇到这种情况时,我最终浏览了我的版本历史记录,查看最近的更改和/或打开每个布局XML并检查预览中的错误。

    希望这对至少某人有帮助......