草庐IT

android - 启动器开发 - 主页按钮不会返回初始 Activity

coder 2023-12-15 原文

我有一个用作启动器的应用程序。这个应用程序有 3 个 Activity :

  • SplashActivity:加载时显示启动画面,然后启动 LauncherActivity 并完成。这是 list 中标记为启动器的 Activity。

    startActivity(Intent(this, LauncherActivity::class.java))
    finish()
    
    <activity
        android:name=".SplashActivity"
        android:label="@string/app_name"
        android:screenOrientation="landscape"
        android:theme="@style/SplashTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    
  • LauncherActivity:启动器的主要 Activity 。有一个启动 DashboardActivity 的菜单按钮。

     startActivity(Intent(this@LauncherActivity, DashboardActivity::class.java))
    
    <activity
        android:name=".LauncherActivity"
        android:launchMode="singleTask"
        android:screenOrientation="landscape" />
    
  • DashboardActivity:显示应用列表并通过其启动 Intent 启动它们。

    private val DEFAULT_FLAGS_APP_LAUNCH = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
    startActivity(packageManager.getLaunchIntentForPackage(packageInfo.packageName).apply {
        flags = DEFAULT_FLAGS_APP_LAUNCH
    })
    
    <activity
        android:label="@string/apps"
        android:theme="@style/TNA"
        android:name=".DashboardActivity"
        android:launchMode="singleTask"
        android:screenOrientation="landscape" />
    

所有 Activity 都通过 startActivity 启动,包括应用程序。

我想要标准的 Android 启动器行为,即:当通过 DashboardActivity 进入应用程序时,如果我单击主页按钮,转到主启动器 Activity (LauncherActivity) ,然后单击返回时,转到仪表板 (DashboardActivity)。

我遇到的问题是,当单击主页时,它返回到 DashboardActivity,而不是 LauncherActivity。如果我完成 DashboardActivity,然后在应用程序上单击返回时,它会返回到 LauncherActivity

关于如何解决这个问题有什么想法吗?

最佳答案

这绝对与返回/任务堆栈相关。参见 this link有关任务堆栈的更多信息。

当您从 LauncherActivity 转到 DashboardActivity 时,仪表板被放置到任务堆栈上。当通过 HOME 按钮再次请求 LauncherActivity 时,任务堆栈将恢复到启动 LauncherActivity 后使用的最后一个 Activity ,即 DashboardActivity

您有几种不同的选择来解决这个问题:

  1. 不要为“仪表板”使用单独的Activity。考虑一个抽屉,甚至是一个显示内容的 Fragment,当完成调用 startActivity 启动另一个时,可以弹出回主 LauncherActivity应用程序。
  2. 在您的 DashboardActivity 调用 startActivity 之后,它应该调用 finish() 以便它从当前任务堆栈中弹出。
  3. 通常启动器设置为以 singleInstance 模式启动,防止启动器 Activity 的多个实例同时运行。请注意,您需要在 LauncherActivity 中支持 onNewIntent
  4. 为防止与任务管理器进行奇怪的交互,请考虑在启动 DashboardActivity 时设置 FLAG_ACTIVITY_NO_HISTORY

关于android - 启动器开发 - 主页按钮不会返回初始 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48546555/

有关android - 启动器开发 - 主页按钮不会返回初始 Activity的更多相关文章

  1. ruby-on-rails - 未初始化的常量 Psych::Syck (NameError) - 2

    在我的gem中,我需要yaml并且在我的本地计算机上运行良好。但是在将我的gem推送到ruby​​gems.org之后,当我尝试使用我的gem时,我收到一条错误消息=>"uninitializedconstantPsych::Syck(NameError)"谁能帮我解决这个问题?附言RubyVersion=>ruby1.9.2,GemVersion=>1.6.2,Bundlerversion=>1.0.15 最佳答案 经过几个小时的研究,我发现=>“YAML使用未维护的Syck库,而Psych使用现代的LibYAML”因此,为了解决

  2. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  3. ruby - Highline 询问方法不会使用同一行 - 2

    设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案

  4. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  5. ruby-on-rails - 未在 Ruby 中初始化的对象 - 2

    我在Rails工作并有以下类(class):classPlayer当我运行时bundleexecrailsconsole然后尝试:a=Player.new("me",5.0,"UCLA")我回来了:=>#我不知道为什么Player对象不会在这里初始化。关于可能导致此问题的操作/解释的任何建议?谢谢,马里奥格 最佳答案 havenoideawhythePlayerobjectwouldn'tbeinitializedhere它没有初始化很简单,因为你还没有初始化它!您已经覆盖了ActiveRecord::Base初始化方法,但您没有调

  6. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  7. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  8. ruby-on-rails - ActionController::RoutingError: 未初始化常量 Api::V1::ApiController - 2

    我有用于控制用户任务的Rails5API项目,我有以下错误,但并非总是针对相同的Controller和路由。ActionController::RoutingError:uninitializedconstantApi::V1::ApiController我向您描述了一些我的项目,以更详细地解释错误。应用结构路线scopemodule:'api'donamespace:v1do#=>Loginroutesscopemodule:'login'domatch'login',to:'sessions#login',as:'login',via::postend#=>Teamroutessc

  9. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  10. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

随机推荐