Код кнопки аппаратного меню Android не работает должным образом! нужна помощь

#java #android #eclipse #button #menu

#java #Android #eclipse #кнопка #меню

Вопрос:

Я люблю этот сайт, все вы, ребята, потрясающие! но вот еще одна проблема, с которой я сталкиваюсь: в моем приложении у меня есть webview, который отображает веб-сайт во весь экран, я создал код для отображения меню нажатием кнопки меню телефона, откуда я хочу, чтобы произошли две вещи: 1-й пункт меню Вернуться на главный экран приложения, 2-й пункт меню выйти из приложения или закрыть приложение. Первая проблема: после нажатия кнопки меню отображается меню … если я нажму его снова, оно дважды отобразит два варианта, если я нажму его снова, теперь оба элемента отображаются 3 раза и так далее! Вторая проблема: после выбора любого из двух вариантов ничего не происходит! вот мой код, пожалуйста, скажите мне, что я делаю не так! Спасибо

меню xml:

 <?xml version="1.0" encoding="utf-8"?>
<menu
  xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@ id/menuToMenu"
android:title="Menu Principal"
/>
<item
android:id="@ id/menuToSalir"
android:title="Salir"
/>
</menu>
  

Backtomain.java

 import android.app.Activity;
import android.os.Bundle;

public class Backtomain extends Activity {

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

и где я вызываю меню:

 public boolean onPrepareOptionsMenu (Menu menu){
        super.onCreateOptionsMenu(menu);
        MenuInflater mostrar = getMenuInflater();
        mostrar.inflate(R.menu.main_menu, menu);
        return true;
        }

    public boolean onOptionItemSelected(MenuItem item){
        switch (item.getItemId()){
        case R.id.menuToMenu:
            startActivity (new Intent("my.app.BACKTOMAIN"));
            return true;
        case R.id.menuToSalir:
            finish();
            System.exit(0);
            return true;
        }
        return false;
    }
  

Ответ №1:

Вы звоните super.onCreateOptionsMenu() из onPrepareOptionsMenu() . И вы добавляете те же параметры в меню в onPrepareOptionsMenu() . Переименуйте onPrepareOptionsMenu() в onCreateOptionsMenu() , и, вероятно, он будет вести себя лучше.

Также:

  • Если вы считаете, что my.app.BACKTOMAIN действие запущено, вы, вероятно, хотите добавить FLAG_ACTIVITY_REORDER_TO_FRONT или FLAG_ACTIVITY_CLEAR_TOP к Intent .
  • Избавьтесь от menuToSalir выбора меню. Ни одно хорошо написанное приложение для Android не вызовет System.exit(0) . Пользователи покидают ваше приложение, нажимая кнопку HOME, ничем не отличающуюся от того, что они могли бы сделать в веб-приложении.

Комментарии:

1. @ CommonsWave Я изменил onPrepareOptionsMenu () на onCreateOptionsMenu (), и он работает лучше, я получаю то же самое в меню каждый раз, когда нажимаю кнопку меню, но в другом FLAG_REORDER-TO_FRONT или FLAG_ACTIVITY_CLEAR_TOP в соответствии с намерением. Можете ли вы объяснить мне немного больше, возможно, с примером? Спасибо

2. @zvzej: Intent i=new Intent("my.app.BACKTOMAIN"); i.setFlags(FLAG_ACTIVITY_CLEAR_TOP); startActivity(i);

3. это выдает мне ошибку, для решения которой меня спрашивают, хочу ли я создать переменную constant или поле для FLAG_ACTIVITY_CLEAR_TOP

4. @zvzej: Ах, извините, так и должно быть i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); .

5. Да, эта цитата не выдает ошибку, но когда я нажимаю на выбор меню, она ничего не делает.

Ответ №2:

Чтобы устранить вашу первую проблему, попробуйте onCreateOptionsMenu(), а не onPrepareOptionsMenu().

Я не уверен, как решить вторую проблему, я обычно создаю все свои меню на Java вместо использования xml, как у вас.

Комментарии:

1. Можете ли вы объяснить мне или привести пример ее кодирования на Java или где я могу его найти. Спасибо

Ответ №3:

Я нашел проблему, она работает! Мне не хватало буквы «s» в…

 public boolean onOptionItemSelected(MenuItem item){ 
  

правильный способ — это

 public boolean onOptionsItemSelected(MenuItem item){
  

спасибо за вашу помощь Тиму и CommonsWare

Ответ №4:

Я столкнулся с этой проблемой. В моем случае я установил цвет фона экрана активности на черный. Когда меню появилось, у него был прозрачный фон и черный текст, поэтому я не видел, чтобы оно работало.