#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:
Я столкнулся с этой проблемой. В моем случае я установил цвет фона экрана активности на черный. Когда меню появилось, у него был прозрачный фон и черный текст, поэтому я не видел, чтобы оно работало.