Запустить действие с помощью кнопки меню? - PullRequest
1 голос
/ 03 февраля 2011

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

public boolean onCreateOptionsMenu(Menu menu) {
new MenuInflater(getApplication())
        .inflate(R.menu.menu, menu);


return(super.onPrepareOptionsMenu(menu));
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
 switch (item.getItemId()) {
   case R.id.Menu1:          
    Toast.makeText(this, "Coming soon", Toast.LENGTH_SHORT).show();
    break;
   case R.id.Menu2:
       Intent Intent = new Intent(this, About.class);
       startActivity(Intent);


 }
return(super.onOptionsItemSelected(item));
}
}

Манифест Android

    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
  <activity android:name=".AndroidRssReader"
            android:label="@string/app_name">
      <intent-filter>
          <action android:name="android.intent.action.MAIN" />
          <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
  </activity>
  <activity android:name=".About" android:label="@string/app_label"></activity>

Ответы [ 9 ]

7 голосов
/ 03 февраля 2011
Intent Intent = new Intent(this, About.class);
startActivity(Intent);

Это должно стать

Intent intent = new Intent(this, About.class);
startActivity(intent);
1 голос
/ 12 июля 2011

Я просто сделал то же самое, то есть запустил действие с помощью кнопки меню; и это работало нормально. Что касается разрешения переменной с тем же именем, что и у класса, я не уверен в этом. Объявление может работать нормально, но дальнейшие ссылки на эту переменную не будут точными, я думаю. Также убедитесь, что все пути управления в функции onOptionsItemSelected возвращают логическое значение.

1 голос
/ 03 февраля 2011

Моя реализация onOptionsItemSelected() немного отличается, так как я возвращаю true, когда я сам обработал выделение, а не всегда передаю суперклассу.

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.Menu1:
        Intent myIntent = new Intent(this,About.class);
        startActivity(myIntent);
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

Проверьте документацию

Нам действительно нужно увидеть logcat, чтобы быть уверенным

1 голос
/ 03 февраля 2011

Это может быть несколько вещей, например, класс About в вашем корневом пакете?(так как вы объявляете его как android:name=".About")

Но лучший способ устранить это состоит в том, чтобы взглянуть на детали сбоя в Logcat (Eclipse и IntelliJ имеют плагин Logcat),О чем это говорит?

0 голосов
/ 01 февраля 2015

Проверьте ваш файл активности О java.У меня была похожая проблема, когда проект компилировался нормально, но приложение вызывало выключение при нажатии кнопки меню.Когда я переписал второе действие, все было хорошо!

0 голосов
/ 12 апреля 2014

Может быть, это решит проблему. Я вставляю часть примера ниже. Потому что, я думаю, вы забыли сделать новое / второе действие в вашем AndroidManifest.

  <application
    android:allowBackup="true"
    android:allowTaskReparenting="true"
    android:hardwareAccelerated="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    <activity
        android:name="YourPackageName.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    **<activity 
       android:name="YourPackageName.SecondActivity" />   

    <activity 
       android:name="YourPackageName.ThirdActivity" />**   

</application>

Надеюсь, это тебе поможет!

ДОБАВЛЕНО Сообщение:

А это мой код, должно быть работа! Поместите это в свой основной или что-то еще, но не в активность с вашей кнопки.

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    switch (item.getItemId()) {
    case R.id.MenuButton_About:
        Toast.makeText(this, "YourPopupText.", Toast.LENGTH_SHORT).show();
                    startActivity(new Intent("Name of this activity".this, "Name of the menu button acivity".class));
        break;
    default:
        break;
    }
    return super.onOptionsItemSelected(item);
}

}

Вы также можете использовать: Toast.LENGTH_SHORT -> Toast.LENGTH_LONG

Надеюсь, это тебе поможет!

0 голосов
/ 03 февраля 2011

Просто наблюдение, но ваш оператор switch должен сломаться и иметь регистр по умолчанию.это поможет предотвратить ошибки в будущем и, возможно, поможет решить эту проблему.Кроме этого, публиковать журналы ...

0 голосов
/ 03 февраля 2011

Android может испытывать трудности при запуске класса About, например исключение выдается в onCreate(). Просмотр трассировки стека в logcat может подтвердить это. Опубликуйте трассировку стека, если неясно, что является основной причиной.

0 голосов
/ 03 февраля 2011

Вы пытаетесь передать класс в метод startActivity, а не в Intent.Вы объявляете Intent Intent.Вам нужно сделать Intent intent или Intent myIntent, что-то в этом роде.Вы не можете иметь то же имя для переменной, что и ее класс, так же, как вы не можете сделать int int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...