Должен ли я указать имя родительского действия в Манифесте Android?
У меня есть действие, которое запускает другое действие. Обязательно ли указывать родительское действие в Манифесте Android? Я спрашиваю об этом, потому что могут быть другие действия, которые также начнут этот, поэтому я должен указать все из них?
android:parentActivityName="com.example.myfirstapp.MainActivity"
5 ответов
по состоянию на docs - > раздел android: parentActivityName:
система считывает этот атрибут, чтобы определить, какое действие должно быть запущено, когда пользователь нажимает кнопку вверх на панели действий. Система также может использовать эту информацию для синтеза заднего стека действий с TaskStackBuilder.
поэтому вам нужно только указать, что если вы собираетесь использовать up-navigation (в отличие от навигации по кнопке back) или TaskStackBuilder. В других случаях она вам не нужна.
проверьте здесь о up-навигации:http://developer.android.com/design/patterns/navigation.html
вам не обязательно определять 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
в манифесте система считывает этот атрибут, чтобы определить, какое действие должно быть запущено, когда пользователь нажимает кнопку вверх на панели действий. Я. e, он создаст новый экземпляр parentAcivity
, означает, что он вызовет onCreate()
родителя деятельность.
хотя он должен быть определен, если требуется восходящая навигация или синтез backstack, обратите внимание, что атрибут android:parentActivityName
был введен в уровень API 16.
для предыдущих выпусков информация о родительской деятельности доступна из атрибутов, определенных внутри <meta-data>
тег, который объявлен внутри ребенка <activity>
- тег.
пример:
<activity
android:name=".DetailActivity"
android:parentActivityName=".MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity"/>
</activity>
внутри <meta-data>
тег, выберите до android.support.PARENT_ACTIVITY
и к имя родительского класса активности (т. е. то же имя класса, что и у android:parentActivityName
).
если уровень API не известен, оба и встроенные спецификации.
более подробно об указании родительской активности, см.: https://developer.android.com/training/implementing-navigation/ancestral.html#SpecifyParent
кроме того, рассмотрите возможность определения android:launchMode
атрибут внутри вашего main <activity>
тег для установки желаемого поведение восходящей навигации: https://developer.android.com/guide/topics/manifest/activity-element.html#lmode
вы должны указать каждое действие в манифесте, которое вы вызываете через Intent или Launchers, чтобы система могла его найти. Итак, отметьте одно действие как пусковую установку, чтобы ваше приложение могло начать работу и зарегистрировать все другие действия, которые вы вызываете в своем приложении.
Если у вас есть BaseActivity, как это:
public class BaseActivity extends Activity{}
public class MyActivity extends BaseActivity{}
чем вам нужно только зарегистрировать MyActivity, потому что BaseActivity вызывается не системой, а Вами.
нет необходимости указывать родительскую активность в manifest
такой
android:parentActivityName="com.example.myfirstapp.MainActivity"
на navigationUp
вы также можете использовать setDisplayHomeAsUpEnabled(true);
и onSupportNavigateUp()
метод взгляните на это