R.id无法解决

时间:2011-06-02 01:49:52

标签: android debugging android-layout android-widget android-manifest

我想应该使用Android-Manifest.xml文件或布局文件夹中的某些内容来完成某些操作。我是Android的新手,所以我不知道应该写些什么。

public class AndroidPong extends Activity implements  OnClickListener {
    static String tag;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super .onCreate(savedInstanceState);

        tag = getResources().getString(R.string.app_name);
        fullScreen();
        splashScreen();
    }

    @Override
    protected Dialog onCreateDialog(int id) {
        // TODO Auto-generated method stub
        return super .onCreateDialog(id);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // TODO Auto-generated method stub
        return super .onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        return super .onOptionsItemSelected(item);
    }

    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super .onStop();
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super .onDestroy();
    }

    void startGame() {
        setContentView(R.layout.game);// error
        this .findViewById(R.id.Button01).setOnClickListener(this );//error
        this .findViewById(R.id.Button02).setOnClickListener(this );//Error
    }

    void splashScreen() {
        setContentView(R.layout.splash);// error
        this .findViewById(R.id.pongtable).setOnClickListener(this );//error
    }

    void gameMenu() {

    }

    void fullScreen() {
        this .requestWindowFeature(Window.FEATURE_NO_TITLE);
        this .getWindow().setFlags(
                WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }

    public static void debug(String debug) {
        Log.d(tag, debug);
    }


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

<Button android:id="@+id/Button01"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"

<Button android:id="+id/Button02"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
 </absoluteLayout>

5 个答案:

答案 0 :(得分:3)

如果您正在使用eclipse,则已经提出了这个问题

R cannot be resolved - Android error

答案 1 :(得分:3)

看起来你有两种不同类型的错误。我将首先在你的问题标题中提到你所提到的那个。这与资源ID有关。

  

R.id无法解决

当编译器找不到您为某些资源引用的资源(如字符串,布局,菜单等等)时,会发生该错误。这通常是您可以尝试的一些事情的结果。

首先,请确保您使用正确的名称来引用您的资源ID。例如,你有R.id.Button01。如果您使用它来引用按钮的res id,请确保XML中的按钮具有属性android:id="@+id/Button01"

其次,确保XML布局文件中没有错误。如果还有其他错误,那么通常Eclipse(我假设您正在使用Eclipse)将无法识别该项目的资源ID已创建。

如果您看不到这样的明显错误,请尝试清理您的构建。通过转到Project - &gt;来做到这一点。清洁...

其他错误与您的OnClickListeners

有关
this .findViewById(R.id.Button01).setOnClickListener(this );//error
this .findViewById(R.id.Button02).setOnClickListener(this );//Error

this .findViewById(R.id.pongtable).setOnClickListener(this );//error

此错误更直接。您正在错误地设置单击侦听器。 setOnClickListener方法将OnClickListener作为参数。如果要设置新的,则需要传入构建的新OnClickListener。你可以这样做......

this.someButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
             // whatever the button will do             
        }
    });

答案 2 :(得分:2)

我今天也遇到了这个问题。我检查了所有上述答案,但没有任何效果。在我看来,R.java文件没有正确重新生成(即使在Project / Clean命令之后)。没有为我的项目创建“R.id”类。

我终于通过在main.xml布局文件上使用图形布局视图来解决问题(单击main.xml编辑器窗口左下角的Graphical Layout选项卡)。

我将一个虚拟字段拖入布局(包含一个id)并保存。巴姆!现在Eclipse正在按预期生成R.id类。我从main.xml中删除了虚拟字段,一切都是应该的。

答案 3 :(得分:1)

我有两张用大写和小写命名的图像。它工作正常,我在我的项目中使用它们。我建了几次,它从未关心过。无论出于什么原因它都不再喜欢它们了。

它在控制台中显示了这一点:

  

res \ drawable-hdpi \ Image.png:文件名无效:必须仅包含   [A-Z0-9 _]

只需取出大写字符就可以了。 我猜测其他资源错误也会出现在控制台中。

注意:您还会在“问题”窗口中看到如下错误:

  

Unparsed aapt错误!检查控制台输出。

答案 4 :(得分:0)

一些技巧:

您之前可以使用R.id,然后清理项目并再次构建它。我不建议自动构建。

在项目属性中,您可以在/ src文件夹之前订购/ gen文件夹。这将导致首先编译gen文件夹,因此将首先生成R并且可以反映您的更改。

确保您没有任何其他类型的编译错误。