2014-01-20 4 views
0

Я не уверен, что я делаю неправильно здесь, но по какой-то причине линия R.id.action_search остается нерешенным, хотя я определил его в меню/main.xmlнерешенным R.id в андроиде

здесь является 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> 

есть что-нибудь, что я сделал не так? Есть ли способ, которым я должен определить свой идентификатор?

+0

импорт Android.R –

+1

Do * not * import 'android.R'. Используйте «android.R.id.action_search» при ссылке на идентификаторы системы и используйте «R.» только для своих идентификаторов своего проекта, затем «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 не находится в вашем пакете, компилятор не будет иметь проблемы для компиляции. импортируйте свой пакет, и когда вы хотите использовать файл андроида 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-ресурсов. Проверьте консоль ошибок в своей среде разработки, чтобы выяснить, что конкретно не так.

Общие проблемы:

  • неэкранированных символов в вашем strings.xml, например you're вместо you\'re
  • Отсутствует layout_width или layout_height теги в макете ресурсов
  • Пропущенные объявления пространств имен
  • имена переменных не поддерживаются Java, например, из-за капитализации или использования пробелов, дефис или других неподдерживаемых символов
  • Любой другой вид синтаксической ошибки в XML
  • Проверить Консоль и Проблема Tab, вы нашли свою ошибку, когда вы устранить ошибку тэ и построить свой проект еще раз, чтобы ваш R.Java будет генерировать ,
0

В моем SDK мне удалось преобразовать структуру переключателя/корпуса в 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); 
    } 
Смежные вопросы