2013-10-06 4 views
9

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

android:parentActivityName="com.example.myfirstapp.MainActivity" 

ответ

17

По docs -> раздел андроида: parentActivityName:

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

Таким образом, вам нужно только указать, что если вы собираетесь использовать навигацию (в отличие от навигации по обратной кнопке) или TaskStackBuilder. В других случаях вам это не нужно.

Проверьте здесь о вверх-навигации: http://developer.android.com/design/patterns/navigation.html

+0

wow это имеет большой смысл! благодаря! –

0

Использование <category android:name="android.intent.category.LAUNCHER" /> в качестве основного.

Например:

<intent-filter> 
<action android:name="android.intent.action.MAIN" /> 
<category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 

Все другие Активности вы можете установить в качестве android:launchMode="singleTask">

+0

Мне нужно установить их как singleTask? –

+0

Ни в коем случае, когда запускается существоваемая операция «singleTask», все остальные действия над ней в стеке будут уничтожены. –

0

Вы должны указать каждую активность в манифесте, который вы звоните через Intent или Пусковые, что система может найти его. Итак, отметьте одно действие как Launcher, в котором ваше приложение может начать работу и зарегистрировать все другие действия, которые вы вызываете в своем приложении.

Если у вас есть BaseActivity вроде этого:

public class BaseActivity extends Activity{} 

public class MyActivity extends BaseActivity{} 

, чем у вас есть только зарегистрировать MyActivity, потому что BaseActivity не вызывается системой, но вам.

+0

Что делать, если BaseActivity и MyActivity имеют разную родительскую активность? – alex

0

Нет его не нужно указывать родительскую активность в manifest как этот

android:parentActivityName="com.example.myfirstapp.MainActivity" 

для navigationUp вы также можете использовать setDisplayHomeAsUpEnabled(true); и onSupportNavigateUp() метод Take a Look at this

2

Вам не обязательно нужно определить parentActivity в AndroidManifest.xml. Вы можете использовать следующий код для обратной навигации включены:

ActionBar actionBar = getSupportActionBar(); 
     if (actionBar != null) { 
      actionBar.setDisplayHomeAsUpEnabled(true); 
     } 

И осуществить это:

public boolean onOptionsItemSelected(MenuItem item) { 
    int itemId = item.getItemId(); 
    if (itemId == android.R.id.home) { 
     onBackPressed(); 
    } 
    return super.onOptionsItemSelected(item); 
} 

Но если вы определяете parentActivity в манифесте, то система считывает этот атрибут, чтобы определить, какую деятельность должен запускаться, когда пользователь нажимает кнопку «Вверх» на панели действий. т. е. он создаст новый экземпляр parentAcivity, означает, что он будет вызывать onCreate() родительской активности.

+0

Как вы говорите, метод manifest создает новый экземпляр, так же делает onOptionsItemSelected это? – matttm

Смежные вопросы