2012-03-06 1 views
4

Я ударил странную проблему с моим Android-приложением. В моей основной деятельности есть меню, прикрепленное к кнопке меню. Проблема в том, что кнопка меню работает ровно один раз. После нажатия приложение должно быть перезапущено, прежде чем кнопка меню снова будет работать.Меню Android работает только один раз за ход приложения

The (дезинфицировать) код:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    setContentView(R.layout.main); 

    settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
} 



@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    startActivity(new Intent(this, PreferencesActivity.class)); 

    return(super.onCreateOptionsMenu(menu)); 
} 

@Override 
public void onBackPressed() { 
    this.finish(); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    this.finish(); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    this.finish(); 
} 

и активность предпочтений выглядит

public class PreferencesActivity extends PreferenceActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 

     addPreferencesFromResource(R.xml.preferences); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     this.finish(); 
    } 

    @Override 
    public void onBackPressed() { 
     this.finish(); 
    } 
} 

Любые идеи, как я должен решить эту проблему?

ТИА

ответ

5

The onCreateOptionsMenu вызывается только один раз, перед тем как открывать OptionsMenu в первый раз. Вместо этого используйте onPrepareOptionsMenu для звонка startActivity(new Intent(this, PreferencesActivity.class));
onPrepareOptionsMenu вызывается каждый раз, когда вы нажимаете кнопку «Меню».

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    startActivity(new Intent(this, PreferencesActivity.class)); 
    return super.onPrepareOptionsMenu(menu); 
} 
+0

Вы можете расширить это? Не уверен, что вы имеете в виду onPrepareOptionsMenu. – user1174838

+0

Вы должны переопределить onPrepareOptionsMenu в своем классе активности, как и в onCreateOptionsMenu. Я обновил свой ответ, чтобы показать вам код. – Thommy

+0

, который, похоже, работает для основной деятельности, но не для активности ребенка. Когда я нахожусь в дочерней активности и нажимаю кнопку меню, затем кнопку «Назад», я перехожу к основному виду деятельности, а не к дочерней активности, в которой я был? – user1174838

1

Проблема в том, что вы начинаете действие вместо отображения меню. Нормальным способом было бы раздуть меню внутри диалогового окна onCreate Optionsmenu и иметь элемент настроек в этом меню, который, если нажать, отображает активность предпочтений.

Thommy is right. Если вы хотите сразу начать работу с предпочтением (помните, что это необычное поведение для Android-приложения), вы можете сделать это в onPrepareOptionsMenu. В обычном режиме меню создается один раз в обратном вызове onCreateOptionsMenu, после чего его повторно используют.

+0

Мое приложение имеет несколько видов деятельности. Первоначальное действие имеет меню (реализовано в /res/xml/preferences.xml), как и одно из дочерних действий (реализовано аналогично). Я хочу, чтобы при нажатии кнопки меню отобразилось соответствующее меню, и когда нажата кнопка «Назад», активность вызова отображается снова. Пользователь должен иметь доступ к меню столько раз, сколько требуется. – user1174838

+0

благодарит за информацию. Мне нужно будет немного почитать об этом. – user1174838

0

После нажатия кнопки меню вы переходите к PreferencesActivity и всякий раз, когда вы нажимаете туда ... первая активность закрыта из-за метода onBackPressed.

Вы можете мне точно знать, что именно вы ищете?

+0

К сожалению, я добавил комментарий в неправильном текстовом поле. См. Выше – user1174838

+0

Вы хотите, чтобы те же самые меню во всех мероприятиях? Можете ли вы попробовать, удалив this.finish() во всех методах и изменив имя метода onCreateOptionsMenu на onPrepareOptionsMenu. – Pavandroid

+0

nope. Основное действие имеет параметр меню, позволяющий включить или отключить режим демонстрации приложений. Только одно дочернее действие имеет меню, и это влияет на способ работы. – user1174838

Смежные вопросы