startActivity并没有启动我在Android中的活动
我有一个活动名“IntroActivity”,即应用程序的“启动器”活动,在做出一些决策后,会打开一个名为“HomeActivity”的新活动 在我的HomeActivity中,我有一个带有“注销”操作(在菜单中,但设置为显示为操作)的操作栏,该操作栏用于执行一些操作并将用户返回到“注销”活动 但是,HomeActivity内部使用的startActivity方法不起作用,并且没有生成错误。我已经调试了代码,onOptionsItemSelected方法肯定是按照正确的案例执行的。代码如下: 家庭活动:startActivity并没有启动我在Android中的活动,android,android-intent,android-activity,android-actionbar,android-menu,Android,Android Intent,Android Activity,Android Actionbar,Android Menu,我有一个活动名“IntroActivity”,即应用程序的“启动器”活动,在做出一些决策后,会打开一个名为“HomeActivity”的新活动 在我的HomeActivity中,我有一个带有“注销”操作(在菜单中,但设置为显示为操作)的操作栏,该操作栏用于执行一些操作并将用户返回到“注销”活动 但是,HomeActivity内部使用的startActivity方法不起作用,并且没有生成错误。我已经调试了代码,onOptionsItemSelected方法肯定是按照正确的案例执行的。代码如下: 家
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_standard, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_standard_settings:{
// TODO
return true;
}
case R.id.menu_standard_logout:{
//Set logged in to false and then return the user to the intro page
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("logged_in", false);
Intent introIntent = new Intent(this, IntroActivity.class);
startActivity(introIntent);
return true;
}
}
return super.onOptionsItemSelected(item);
}
舱单包括:
<activity
android:name="com.kennel39.diabeteslive_adtdev.IntroActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
我不确定我还能提供什么有用的东西,但如果需要的话,我会很快发布任何额外的部件。
提前感谢,,
Josh我认为在将loggedIn设置为false后,您没有提交共享首选项。因此,您的标志不会更新,并且您的介绍活动会再次将您重定向到主活动 试一试
commit() 我认为在将loggedIn设置为false后,您没有提交共享首选项。因此,您的标志不会更新,并且您的介绍活动会再次将您重定向到主活动 试一试
commit() 在我看来,你错过了两件让事情运转起来的事情:
editor.commit()
紧跟在editor.putBoolean之后(“登录”,false)代码>为了保存您的价值“登录”
finish()代码>介于之间的起始触觉(introIntent)
和返回true代码>
据我所见,你错过了两件让事情顺利进行的事情:
editor.commit()
紧跟在editor.putBoolean之后(“登录”,false)代码>为了保存您的价值“登录”
finish()代码>介于之间的起始触觉(introIntent)
和返回true代码>
你的代码正在完成这项工作,调试你的代码并正确检查你将从中得到的条件。我认为Prakash M和Thomas Bouron的答案可能是正确的。我猜
IntroActivity
实际上正在启动,但由于您未能commit()
首选项“登录”,因此IntroActivity
会立即重新启动HomeActivity
,因为它认为它已登录。Prakash首先回答,所以我给了他一个勾号,这是一个多么愚蠢的错误。谢谢你的代码,你的代码已经完成了,调试你的代码,检查你能从中得到的条件。我认为Prakash M和Thomas Bouron的答案可能是正确的。我猜IntroActivity
实际上正在启动,但由于您未能commit()
首选项“登录”,因此IntroActivity
会立即重新启动HomeActivity
,因为它认为它已登录。Prakash首先回答,所以我给了他一个勾号,这是一个多么愚蠢的错误。谢谢,谢谢,托马斯。我已经将普拉卡什的答案标记为正确,因为我首先看到了他的解决方案,它解决了我的问题。然而,你的答案中的额外一点可能是有益的。我认为如果不使用finish()我可能会在这里堆积很多相同的活动,这对吗?确实如此。更准确地说,如果用户使用后退按钮(此处),Android将保持对先前启动的活动的引用,以便再次为其提供服务。不调用finish()方法将父活动置于后台。如果设备在内存不足的情况下运行,Android可以停止此活动以腾出空间。。。通过调用finish()代码>。杀死一个活动不会影响Android对后退按钮轨迹的引用,但在内存完善方面会更好。谢谢Thomas。我已经将普拉卡什的答案标记为正确,因为我首先看到了他的解决方案,它解决了我的问题。然而,你的答案中的额外一点可能是有益的。我认为如果不使用finish()我可能会在这里堆积很多相同的活动,这对吗?确实如此。更准确地说,如果用户使用后退按钮(此处),Android将保持对先前启动的活动的引用,以便再次为其提供服务。不调用finish()方法将父活动置于后台。如果设备在内存不足的情况下运行,Android可以停止此活动以腾出空间。。。通过调用finish()代码>。杀死一个活动不会影响Android对后退按钮轨迹的引用,但在内存完善方面会更好。