Я пытаюсь запустить мероприятие из меню опций, но мое приложение продолжает сбой. Единственной ошибкой, которую я получаю, является ошибка 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 или связанном с ним файле макета, но есть проблема с реализацией из меню опций.
Я также реализовал этот же метод, как показано выше (в коде) в другом приложении, и не имел никаких проблем, поэтому я действительно в недоумении.
Вся помощь будет принята с благодарностью.
Спасибо, Адам.
Я решил проблему сейчас.
Оказывается, проблема была вовсе не в классе ListActivity
, это было на самом деле в классе ColourActivity
.
Я пытался разобрать несколько цветов в onCreate
, но я забыл включить # в одну из строк цвета RGB, следовательно, авария!
Спасибо кучам за помощь, Адам.
Намерение, которое вы активируете, должно указывать на какой-то целевой компонент, которого нет в вашем случае, вместо этого вы должны сделать следующее:
@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;
}
Привет, адам, ваш код выглядит отлично, пока я тестирую свой эмулятор, проверьте, добавили ли вы имя класса "ColourActivity" в ваш файл манифеста.
<activity android:name="ColourActivity"></activity>
Попробуйте это,
@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;
}
}
Проверь это:
@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;
}