【问题标题】:Open Activity with backwards to MainActivity in my app在我的应用程序中打开 Activity 并返回到 MainActivity
【发布时间】:2014-05-13 09:10:21
【问题描述】:

我遇到了一些活动的流程问题。期望的行为如下:

用户有时会收到通知。单击此通知时,将打开一个新的Activity,其中包含一些信息。在此活动中,有一个按钮,其目的是将用户重定向到另一个Activity,其中显示了更详细的信息。当用户在 details Activity 中并按下后退按钮(或 ActionBar 中的后退按钮)时,此按钮将关闭并显示 Main Activity(此按钮与我首先提到的不同)。

除了最后一部分,一切都很好。当用户按下后退按钮时,应用程序关闭并显示主屏幕。为什么会这样?

这是我的AndroidManifest.xml

<activity
    android:name=".MainActivity">
</activity>

<activity
    android:name=".DetailActivity"
    android:label="@string/title_detail_activity"
    android:parentActivityName="solar.panik.MainActivity" >
    <!-- Parent activity meta-data to support 4.0 and lower -->
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="solar.panik.MainActivity" />
</activity>

<activity
    android:name=".NotificationActivity"
    android:theme="@style/NotificationActivity"      
    android:excludeFromRecents="true">
</activity>

这是从NotificationActivity 开始DetailActivity 的按钮的onClick 代码:

Intent intent = new Intent(NotificationActivity.this, DetailActivity.class);
startActivity(intent);
finish();

提前致谢

【问题讨论】:

    标签: android android-activity


    【解决方案1】:

    当您从启动器以外的其他东西启动应用时,您将需要根据您的意图传递返回堆栈

    Android tutorial

    向下滚动以在启动 Activity() 时创建回栈。

    所以在你的情况下:

    // Intent for the activity to open when user selects the notification
    Intent detailsIntent = new Intent(this, DetailActivity.class);
    
    // Use TaskStackBuilder to build the back stack and get the PendingIntent
    PendingIntent pendingIntent =
            TaskStackBuilder.create(this)
                            // add all of DetailActivity's parents to the stack,
                            // followed by DetailsActivity itself
                            .addNextIntentWithParentStack(detailsIntent)
                            .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
    
    NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
    builder.setContentIntent(pendingIntent);
    

    看看这个answer

    下面是旧答案

    确保在您的详细信息活动中 onBackPressed() 方法未被覆盖(或定义)。

    如果不是这样,请尝试将其添加到您的清单中并删除您当前的“.MainActivity”活动和标签。 (或者用这个代替)

        <activity 
            android:name="solar.panik.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    

    您必须将其声明为 MAIN,以便向上按钮知道该去哪里。 “返回”将带您到层次结构中的下一个活动。

    希望对您有所帮助。

    【讨论】:

    • 我没有覆盖 onBackPressed() 函数。实际上,还有另一个 Activity 声明为 MAIN,这就是我的登录活动。在那里检查用户是否登录。如果他已登录,则将用户带到主要活动,如果没有,则开始登录过程。
    • 这一行有两个>>:android:value="solar.panik.MainActivity" />>
    • Ups,是的,但这并没有造成任何问题
    • 您的清单看起来不错。在详细信息活动中按回 应该 总是带您到 MainActivity.... 这是一个远景,但我会定义您的活动的全名... android:name="solar.panik。 MainActivity”,而不是依靠它自己解决 .MainActivity 所在的位置......看看我的代码,这就是我所做的。
    • 不,这也不是问题:S
    【解决方案2】:

    在您的详细活动中执行此操作。你点击后退按钮的那个。

    @Override
    public void onBackPressed() {
        Intent intent = new Intent(DetailActivity.this, MainActivity.class);
        startActivity(intent);
        finish(); 
    }
    

    【讨论】:

    • 应该是:Intent intent = new Intent(DetailActivity.this, MainActivity.class); 因为我正试图从 DetailActivity 回到 MainActivity,不是吗?但是该代码无法正常工作。它一直把我带到主屏幕:/
    • 什么安卓版本?
    • 我正在 Android 4.2.1 中测试它
    • 我可能会说这不是我的 MainActivity 的问题。可以直接从主要活动转到详细活动,然后后退按钮工作正常。但问题是当我从通知活动启动详细活动时。不知道你是否理解我的问题。
    • 尝试在您的详细活动中添加一个按钮,然后在 onclick() 中添加意图代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 2017-12-22
    相关资源
    最近更新 更多