Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
startActivity并没有启动我在Android中的活动_Android_Android Intent_Android Activity_Android Actionbar_Android Menu - Fatal编程技术网

startActivity并没有启动我在Android中的活动

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方法肯定是按照正确的案例执行的。代码如下: 家

我有一个活动名“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()finish()。杀死一个活动不会影响Android对后退按钮轨迹的引用,但在内存完善方面会更好。谢谢Thomas。我已经将普拉卡什的答案标记为正确,因为我首先看到了他的解决方案,它解决了我的问题。然而,你的答案中的额外一点可能是有益的。我认为如果不使用finish()我可能会在这里堆积很多相同的活动,这对吗?确实如此。更准确地说,如果用户使用后退按钮(此处),Android将保持对先前启动的活动的引用,以便再次为其提供服务。不调用
    finish()finish()。杀死一个活动不会影响Android对后退按钮轨迹的引用,但在内存完善方面会更好。