未解决的R.id在android中

时间:2014-01-20 18:45:56

标签: android

我不确定我在这里做错了什么但是由于某种原因,即使我在menu / main.xml中定义了Line R.id.action_search仍未解决

这是MainActivity.java

    package com.example.myfirstapp;

import android.os.Bundle;   
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

    //... other methods above
    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        //handle each number from the item in a case block
        switch (item.getItemId())
        {
            case R.id.action_search: //error on this R.id call. Unresolved
                openSearch();
                return true;
            case R.id.action_settings:
                openSettings();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

以下是main.xml文件中的代码:

 <menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:id="@+id/action_search"
    android:icon="@drawable/ic_action_search"
    android:title="@string/action_search"
    android:showAsAction="ifRoom" />"
    <item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:showAsAction="never"
    android:title="@string/action_settings"/>

    </menu>

我做错了什么吗?有没有办法让我定义我的身份?

4 个答案:

答案 0 :(得分:0)

您似乎没有导入项目的R.java。试试那个

答案 1 :(得分:0)

在您的代码中添加此内容。通常,您应该将菜单相关项目保存在res文件夹下的菜单中。

public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
// If it in menu folder then use R.menu.main and if it in layout then use R.menu.main

    return true;
}

答案 2 :(得分:0)

每当生成的R类没有生成时,它表明由于XML资源的某些解析问题而产生它的问题。检查IDE中的错误控制台,找出具体错误。

常见问题是:

  • strings.xml中未转义的字符,例如you're而不是you\'re
  • 布局资源中缺少layout_widthlayout_height个标签
  • 缺少名称空间声明
  • Java不支持的变量名称,例如由于大写或使用空格,连字符或其他不受支持的字符而导致
  • XML中的任何其他类型的语法错误
  • 检查控制台问题标签,当您解决了错误并再次构建项目时,您会发现错误,因此 R.Java 将生成。

答案 3 :(得分:0)

我的SDK让我将switch / case结构转换为if / else if / else。在那之后它对我起作用真是奇怪。

    int itemId = item.getItemId();
    if (itemId == R.id.action_search) {
        openSearch();
        return true;
    } else if (itemId == R.id.action_settings) {
        openSettings();
        return true;
    } else {
        return super.onOptionsItemSelected(item);
    }