родителска дейност с имплицитни намерения

Успешно използвам атрибута android:parentActivityName в манифеста, за да задам родителската дейност (дейност A), когато друга дейност (дейност B) се стартира чрез насочено известие, например. След това, ако се върна, преминавам към дейност А.

Въпреки това, той не работи с имплицитни намерения. Имам филтър за намерения, деклариран в манифеста за дейност B. Когато дейност B се стартира извън приложението, изглежда не засяга атрибута android:parentActivityName (или метаданните android.support.PARENT_ACTIVITY с по-ниски API).

Как мога да задам родителската дейност в този случай?

Блокът на манифеста:

<activity
        android:name="com.domain.app.activities.ActivityB"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="stateUnchanged"
        android:parentActivityName="com.domain.app.activities.ActivityA" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.domain.app.activities.ActivityA" />
        <intent-filter>
            <category android:name="android.intent.category.DEFAULT" />
            <action android:name="android.intent.action.VIEW" />
            <data android:scheme="http" android:host="domain.com" android:pathPattern=".*" />
        </intent-filter>
    </activity>

Всяка помощ се оценява.

Благодаря!


person LopezAgrela    schedule 12.05.2015    source източник


Отговори (2)


От документацията на разработчиците: https://developer.android.com/training/implementing-navigation/ancestral

Навигирайте нагоре с нов заден стек Ако дейността ви предоставя някакви филтри за намерения, които позволяват на други приложения да стартират дейността, трябва да приложите onOptionsItemSelected() обратно извикване, така че ако потребителят натисне бутона Нагоре, след като е въвел активността ви от задача на друго приложение, приложението ви стартира нова задача със съответния заден стек, преди да премине нагоре.

Можете да го направите, като първо извикате shouldUpRecreateTask(), за да проверите дали екземплярът на текущата активност съществува в задача на друго приложение. Ако върне true, изградете нова задача с TaskStackBuilder. В противен случай можете да използвате navigateUpFromSameTask() метод, както е показано по-горе.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar's Up/Home button
    case android.R.id.home:
        Intent upIntent = NavUtils.getParentActivityIntent(this);
        if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
            // This activity is NOT part of this app's task, so create a new task
            // when navigating up, with a synthesized back stack.
            TaskStackBuilder.create(this)
                    // Add all of this activity's parents to the back stack
                    .addNextIntentWithParentStack(upIntent)
                    // Navigate up to the closest parent
                    .startActivities();
        } else {
            // This activity is part of this app's task, so simply
            // navigate up to the logical parent activity.
            NavUtils.navigateUpTo(this, upIntent);
        }
        return true;
    }
    return super.onOptionsItemSelected(item);
}

Забележка: За да работи методът addNextIntentWithParentStack(), трябва да декларирате логическия родител на всяка дейност във вашия манифестен файл, като използвате android:parentActivityName< /em> атрибут (и съответния елемент), както е описано по-горе.

person grig    schedule 03.08.2018

Както е споменато в сайта за разработчици, „указването на вашата родителска функционалност за дейност“ се предоставя в API ниво 16.

Започвайки с Android 4.1 (API ниво 16), можете да декларирате логическия родител на всяка дейност, като посочите атрибута android:parentActivityName в елемента.

и там също се посочва, че за android на по-нисък API предоставя библиотека за поддръжка.

ако приложението ви поддържа Android 4.0 и по-стари версии, включете библиотеката за поддръжка с приложението си и добавете елемент в . След това посочете родителската дейност като стойност за android.support.PARENT_ACTIVITY, съответстваща на атрибута android:parentActivityName.

ето връзката: http://developer.android.com/training/implementing-navigation/ancestral.html#SpecifyParent

и можете също да видите тази публикация.

person Manish    schedule 15.05.2015