2014-01-20 66 views
0

我不知道我在做什麼錯在這裏,但由於某些原因,線R.id.action_search仍然沒有得到解決,即使我在菜單/ main.xml中定義了它懸而未決R.id在android系統

這裏是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> 

有什麼,我做錯了什麼?有沒有一種方法可以定義我的ID?

+0

import Android.R –

+1

Do * not * import'android.R'。在引用系統ID時使用'android.R.id.action_search',並且只將'R.'用於你自己的項目的id,然後'import com.example.myfirstapp.R' – 323go

+1

清理你的項目:Project-> Clean。看看你的gen文件夾 - 裏面是R.java?如果不是,它不應該重建它應該,很可能是因爲您的一個佈局xml文件中有錯誤。 – NigelK

回答

0

您似乎不會導入您的項目的R.java。試試

+0

有人告訴我,如果我導入Android,它會根據哪個R文件(我的包文件中的Android.R或R)來混淆編譯器。這不正確嗎? –

+0

Android R不在您的軟件包中,編譯器不會有問題需要編譯。導入你的包,當你想使用android R文件時,你可以通過調用android.R來使用它 –

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; 
} 
0

只要不產生你生成的R類,則表明有一個與它產生由於從XML資源解析一些問題的問題。檢查IDE中的錯誤控制檯,找出具體的錯誤。

常見的問題有:

  • 的轉義字符在strings.xml,例如you're,而不是you\'re
  • 缺少layout_widthlayout_height標籤佈局資源
  • 缺少命名空間聲明
  • 變量名不受Java支持,例如由於大寫或使用空格,連字符或其他不受支持的字符
  • 在XML的任何其他類型的語法錯誤的
  • 檢查控制檯問題選項卡,你會發現你的錯誤,當你解決TE錯誤並重新建立你的項目,所以你R.Java將產生。
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); 
    }