Android: начать деятельность из меню настроек

1

Я пытаюсь запустить мероприятие из меню опций, но мое приложение продолжает сбой. Единственной ошибкой, которую я получаю, является ошибка ActivityThread.performLaunchActivity(ActivityThread $ ActivityRecord, Intent) в окне отладки в Eclipse.

Ниже приведен код, который я использую в данный момент, но имейте в виду, что я пробовал несколько вариантов, все из которых заканчиваются тем же самым несчастьем, в одном и том же фрагменте кода - оператор startActivity (обнаруженный с помощью точек останова, так как я "Не знаю, как увидеть трассировку стека в окне LogCat, как описано в моем предыдущем вопросе Android/Eclipse: помощь с LogCat).

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.changescheme, menu);
    menu.findItem(R.id.changeScheme).setIntent(new Intent(this, ColourActivity.class));
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    super.onOptionsItemSelected(item);
    this.closeOptionsMenu();
    startActivity(item.getIntent());
    return true;
}

И вот файл changescheme.xml:

<?xml version="1.0" encoding="UTF-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/changeScheme" android:title="Change Colour Scheme" android:icon="@android:drawable/ic_menu_edit"></item>
</menu>

Я также попытался использовать оператор switch (item.getItemId()) в блоке onOptionsItemSelected в отличие от menu.findItem в блоке onCreateOptionsMenu, но все равно не повезло.

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

Для меня это означает, что нет ничего плохого в классе ColourActivity или связанном с ним файле макета, но есть проблема с реализацией из меню опций.

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

Вся помощь будет принята с благодарностью.

Спасибо, Адам.

  • 0
    Было бы очень полезно, если бы вы могли предоставить logcat. Пожалуйста, попробуй…
  • 0
    @LaiVung Пожалуйста, просмотрите ссылку, приведенную в вопросе, которая подчеркивает тот факт, что я не уверен, как это сделать ...
Показать ещё 2 комментария
Теги:
android-activity
menu
options

5 ответов

0
Лучший ответ

Я решил проблему сейчас.

Оказывается, проблема была вовсе не в классе ListActivity, это было на самом деле в классе ColourActivity.

Я пытался разобрать несколько цветов в onCreate, но я забыл включить # в одну из строк цвета RGB, следовательно, авария!

Спасибо кучам за помощь, Адам.

  • 0
    Я отмечу этот ответ как правильный, когда веб-сайт позволяет мне это делать, поскольку моя репутация слишком низкая, чтобы сразу же пометить его как правильный ответ
0

Намерение, которое вы активируете, должно указывать на какой-то целевой компонент, которого нет в вашем случае, вместо этого вы должны сделать следующее:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    super.onOptionsItemSelected(item);
    this.closeOptionsMenu();
    Intent intent = new Intent(ActivityA.this, ColourActivity.class);
    /*Here ActivityA is current Activity and ColourActivity is the target Activity.*/
    startActivity(intent);
    return true;
}
  • 0
    Спасибо за ответ @jeet, но я попробовал его, как указано выше, с ListActivity.this (вместо просто «this»), причем ListActivity - это класс, из которого выполняется этот код, и он не работает. Я также попытался разделить одну строку в моем коде на 2 строки, как в вашей (инициализация намерения в отдельной строке), и мне также не повезло с этим. Есть другие идеи?
  • 0
    Я проверил ваш код, и он работает отлично. Кажется, другая проблема, если вы можете публиковать журналы, мы можем проверить это.
0

Привет, адам, ваш код выглядит отлично, пока я тестирую свой эмулятор, проверьте, добавили ли вы имя класса "ColourActivity" в ваш файл манифеста.

  <activity android:name="ColourActivity"></activity>
  • 0
    Да, спасибо, хотя это ".ColourActivity" в моем Mainfest
0

Попробуйте это,

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflator = getMenuInflater();
    inflator.inflate(R.menu.changescheme, menu);
    return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

    switch(item.getItemId())
         {
         case  R.id.changeScheme:
         Log.d("ChangeScheme", "Selected : ChangeScheme Option");

startActivity(new Intent(MainAcitivity.this, ColourActivity.class));

          return true;
         caseR.id.help:
          Log.d("HelpMenu", "Selected : Help Option");
          //Here put your code
          return true;


         }

    }
  • 0
    Это производит именно то, что я ожидал. Я могу видеть это в журнале, прежде чем он падает. Я даже попытался изменить Log.d на Log.e в надежде, что смогу увидеть журнал сразу после этого (предполагая, что это будет журнал, сообщающий мне, почему мое приложение зависло), но этот вывод был единственной строкой, которая обнаружилась в LogCat
0

Проверь это:

@Override
    public boolean onCreateOptionsMenu(Menu menu){
        MenuInflater inflater=getMenuInflater();
        inflater.inflate(R.menu.changescheme, menu);
        return true;
    }

@Override 
    public boolean onOptionsItemSelected(MenuItem item){
        switch (item.getItemId()) {
        case R.id.changeScheme:
            //start activity here
            break;

        case R.id.help:
            //start activity here
            break;
        }
        return true;
    }
  • 0
    Спасибо, уже попробовал это, что я изложил в своем вопросе. Мне не повезло

Ещё вопросы

Сообщество Overcoder
Наверх
Меню