2015-11-21 1 views
1

Я относительно новичок в разработке Android и пытаюсь узнать о MenuItem, но не имел большого успеха. У меня возникли проблемы с вызовом метода при нажатии элемента menuitem. Вот мой код:Android - MenuItem onOptionsItemВыбранный метод не работает, но не возвращает ошибок

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    String selectedMenuIdString = (String) item.getTitleCondensed(); 

    if (selectedMenuIdString.equals("about")) { 
     doThis(item); 
     return true; 
    } 
    return true; 
} 

public void doThis(MenuItem item) { 
    Toast.makeText(this, "Hello World", Toast.LENGTH_LONG).show(); 
} 

Он работал один раз в несколько дней назад, но он не будет, и я понятия не имею, почему. Может ли кто-нибудь помочь?

<item 
    android:id="@+id/search" 
    android:orderInCategory="100" 
    android:title="@string/search" 
    android:titleCondensed="search" 
    /> 
<item 
    android:id="@+id/products" 
    android:orderInCategory="100" 
    android:title="@string/products"/> 
<item 
    android:id="@+id/contact_us" 
    android:orderInCategory="100" 
    android:title="@string/contactus"/> 
<item 
    android:id="@+id/about" 
    android:orderInCategory="100" 
    android:title="@string/about"/> 

И мои строки:

<string name="search">Search</string> 
<string name="products">Products</string> 
<string name="contactus">Contact Us</string> 
<string name="about">About</string> 

ответ

4

сделать это таким образом, это намного проще:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getId(); // Retrieve the id of the selected menu item 

    switch(id) { 
     case R.id.about: // "@+id/about" is the id of your menu item (menu layout) 
      doThis(item); 
      return true; 
      break; 
     case ... 
    } 
    return super.onOptionsItemSelected(item); 
} 

Нет слушателей, без дополнительной сложности.

1

Всегда сравнивайте идентификаторы предметов, а не заголовок или что-то еще, как в другом ответе.

Другой хороший способ сделать это: попробуйте обработать события щелчка через OnMenuItemClickListener в функции onPrepareOptionsMenu. Пример кода ниже:

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 

     MenuItem prefs = menu.findItem(R.id.prefs); // your item identifier 
     prefs.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 
      @Override 
      public boolean onMenuItemClick(MenuItem item) { 
       doThis(); 
       return false; 
      } 
     }); 
} 
1

Вы говорите

String selectedMenuIdString = (String) item.getTitleCondensed(); 

    if (selectedMenuIdString.equals("about")) { 

и пункт о, как это кажется здесь не имеет condensedTitle

<item 
    android:id="@+id/about" 
    android:orderInCategory="100" 
    android:title="@string/about"/> 

Так изменить ваш код:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    switch(item.getItemId()) { 
     case R.id.about:{ 
      //do something here 
      return true; 
      break; 
     } 
     case R.id.search:{ 
      //do something here 
      return true; 
      break; 
     } 
     case R.id.contact_us:{ 
      //do something here 
      return true; 
      break; 
     } 
     case R.id.products:{ 
      //do something here 
      return true; 
      break; 
     } 
    } 
    return super.onOptionsItemSelected(item); 
}