Android: начать деятельность с MenuItem - PullRequest
1 голос
/ 22 января 2010

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

На самом деле, я строю свое меню (и оно работает нормально) из моего основного класса активности, используя MenuInflater:

 @Override
    public boolean onCreateOptionsMenu(Menu menu) 
    {
        super.onCreateOptionsMenu(menu);
        //the Menu Inflater class allows to create a menu from a XML File
        MenuInflater inflater = new MenuInflater(this);
        inflater.inflate(R.layout.menutest,menu);
        return true;
    }

И я обрабатываю выбор меню, используя следующий код (тоже работает нормально):

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) 
    {
        case R.id.MenuItemNewWebsite:
            ShowScreenAddSite();
        break;

        default:    
        break;
    }
    return false;
}  

У меня есть второе и последнее действие под названием AddWebsite, и я хотел бы запустить его, но следующий код не работает:

protected void ShowScreenAddSite()
{
    Intent i = new Intent(AddWebsite.class);
    startActivity(i);

}

Знаете ли вы, что еще я должен передать конструктору Intent? 1015 *

Ответы [ 3 ]

7 голосов
/ 22 января 2010

решение было слишком простым, похоже, что в android каждый класс активности не имеет автоматической ссылки в manifest.xml.

Я просто добавляю новое действие в манифест, и он отлично работает.

С уважением. Хосе

1 голос
/ 22 января 2010

Вы также можете сделать что-то вроде этого

/* (non-Javadoc)
 * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
 */
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    final MenuInflater inflater = new MenuInflater(this);
    final Intent[] menuIntents = new Intent[] {
              new Intent(this, AddWebsite.class) };
    inflater.inflate(R.menu.mymenu, menu);
    final int ms = menu.size();
    for (int i=0; i < ms; i++) {
        menu.getItem(i).setIntent(menuIntents[i]);
    }
    return super.onCreateOptionsMenu(menu);
}

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

1 голос
/ 22 января 2010

Я все еще новичок в Android, но вам не нужно передавать контекст конструктору Intent?

protected void ShowScreenAddSite()
{
    Intent i = new Intent(this, AddWebsite.class);
    startActivity(i);

}

Вы, вероятно, делаете это изнутри действия, поэтому я думаю, что вы должны использовать "this"

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