Должен ли я указать имя родительского действия в Манифесте 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() метод взгляните на это