Android 从onPostExecute(字符串结果)启动活动不会';不设置用户界面标志

Android 从onPostExecute(字符串结果)启动活动不会';不设置用户界面标志,android,android-activity,android-asynctask,navigationbar,Android,Android Activity,Android Asynctask,Navigationbar,我的总体目标是在Android应用程序中启动活动时隐藏导航栏 我有两个活动,第一个是登录屏幕,有一个异步任务正在运行,并且根据结果启动我的新活动 在第一个活动中执行OnPostExecute ..... @Override protected void onPostExecute(String result) { try { if (result.equals("true")) {

我的总体目标是在Android应用程序中启动活动时隐藏导航栏

我有两个活动,第一个是登录屏幕,有一个异步任务正在运行,并且根据结果启动我的新活动

在第一个活动中执行OnPostExecute

 .....

 @Override
    protected void onPostExecute(String result)
    {

        try
        {
            if (result.equals("true"))
            {
                Intent intent = new Intent(mContext, MainRota.class);
                startActivity(intent);
                finish();

            }
            else
            {
                CharSequence text = "One or more fields are incorrect!";
                int duration = Toast.LENGTH_SHORT;
                Toast toast = Toast.makeText(mContext, text, duration);
                toast.show();
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
第二个活动立即设置ui标志以隐藏导航栏

一旦创建第二个活动

.....

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_layout);

    View decorView = getWindow().getDecorView();
 // Hide both the navigation bar and the status bar.
 // SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as
 // a general rule, you should design your app to hide the status bar whenever you
// hide the navigation bar.
    int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                             | View.SYSTEM_UI_FLAG_FULLSCREEN
                             | View.SYSTEM_UI_FLAG_IMMERSIVE
                             | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                             | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;

    decorView.setSystemUiVisibility(uiOptions);
}
当第二个活动启动时,几乎就好像忽略了标志,而没有隐藏条一样

如果我直接从第一个活动的onCreate开始第二个活动,它工作得很好,但显然我是通过传递我的登录名来完成的

有没有人知道为什么会发生这种情况,以及如何修复,因为我认为PostExecute在主线程上运行,所以在这里启动活动应该不会有问题

更新

我已经找到了导致问题的原因,但我仍然不确定原因

在登录活动中,我添加了一个侦听器,这样当您输入密码并按下“完成”时,它就可以直接登录,而不必点击登录按钮。如果我删除这个监听器并返回到使用登录按钮,它就可以正常工作。这是我的侦听器代码

((EditText)findViewById(R.id.password)).setOnEditorActionListener(
      new EditText.OnEditorActionListener() 
      {
          @Override
          public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
          {
              if (actionId == EditorInfo.IME_ACTION_SEARCH ||
                          actionId == EditorInfo.IME_ACTION_DONE ||
                          event.getAction() == KeyEvent.ACTION_DOWN &&
                                  event.getKeyCode() == KeyEvent.KEYCODE_ENTER)
              {
                  new GetJSONResult().execute("");
                  return true;
              }
              return false;
          }
      });
这是我的登录按钮

    LoginButton = (Button) findViewById(R.id.loginButton2);
    LoginButton.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View arg0)
        {
            new GetJSONResult().execute("");
        }
    });

所以现在的问题是,为什么从
EditText
上的侦听器调用asyncTask会导致从
OnPostExecute
开始的新活动中忽略systemUI标志,尝试在UI线程中启动asyncTask,如:

runOnUiThread(new Runnable(){
    @Override public void run(){
        new GetJSONResult().execute("");
    }
});

只需从
OnEditorActionListener
方法返回false
只需对代码进行一点更改:

((EditText)findViewById(R.id.password)).setOnEditorActionListener(
      new EditText.OnEditorActionListener() 
      {
          @Override
          public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
          {
              if (actionId == EditorInfo.IME_ACTION_SEARCH ||
                          actionId == EditorInfo.IME_ACTION_DONE ||
                          event.getAction() == KeyEvent.ACTION_DOWN &&
                                  event.getKeyCode() == KeyEvent.KEYCODE_ENTER)
              {
                  new GetJSONResult().execute("");
              }
              return false;
          }
      });
我已经检查过了,对我来说很好


希望这对你有帮助ツ

您可以尝试在
onStart()
中设置这些标志吗?似乎没有什么区别:-)您可以尝试在开始活动之前将这些标志添加到意图中吗?是否可以像这样添加它们。setFlags(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_全屏| View.SYSTEM_UI_FLAG_沉浸式| View.SYSTEM_UI_FLAG_Layou STABLE | View.SYSTEM_UI_FLAG_HIDE_导航);还需要什么吗?这目前不起作用。您的意思是说,当您单击“登录”按钮时,一切正常。但当您单击“完成”时键盘上的按钮,出现了问题。嗨,亲爱的,这确实有效,你能解释为什么吗?从医生那里,它说,如果你使用了动作,则返回true,否则返回false。我猜返回true会处理其他事情:|这对我来说也是个问题。是的,这对我来说已经足够好了,奇怪的问题仍然存在,我不可能是第一个来到ac的人罗斯:不过,不管怎样,谢谢你的帮助