如何禁用或覆盖Android中的oncreate方法

时间:2014-07-16 07:26:41

标签: android back-button

我的申请表中有3页。第A,B,C页。当我单击A页面中的下一个按钮时,页面将导航到B页面。在该页面中将有一些请求和响应过程,并且将发生进度指示器。然后,当我单击下一步时,页面将导航到C页面。还会有一些请求和响应过程以及进度指示器过程。现在我的问题是当我从页面C单击后退按钮时页面将导航到B页面。但请求响应流程和进度指示器流程正在运行。在这里,当我点击后退按钮时,我不想做这个过程。现在我尝试这样: -

@Override
protected void onStart() {
    super.onStart();
    Log.v(this.getClass().toString(),"onStart");
}

当我点击后退按钮时,请求和响应过程无效。但进度指标正在加载。该进度指标不断滚动。如何禁用所有功能。我只想回去。不要做任何其他工作。请帮我解决这个问题。抱歉,对于可怜的英语..

5 个答案:

答案 0 :(得分:1)

您不希望覆盖此用例的onCreate()方法,为什么要这样做?将创建活动,并且该过程将运行。您想要的是覆盖onBackPressed()方法,以便在该过程完成之前不能退出活动。

与这些类似:Android: Proper Way to use onBackPressed() with Toast但是在这里你要制作一个在进程未完成时设置为false的布尔值,并在完成时设置为true。仅当onBackPressed()super.onBackPressed()时,允许boolean致电true

@Override
public void onBackPressed()
{
    if(processesCompleted == true)
    {
        super.onBackPressed();
    }
}

答案 1 :(得分:1)

如您所见,您添加了一个标志Intent.FLAG_ACTIVITY_CLEAR_TOP。该标志将清除以前的所有活动。

Intent.FLAG_ACTIVITY_CLEAR_TOP - 如果已设置,并且正在启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是会关闭其上的所有其他活动,此Intent将作为新Intent传递到(现在位于顶部)旧活动。

此外,您还完成了当前的活动,因此导航回B页会调用B onCreate方法,您可以在其中处理这些请求并处理相关内容。避免添加flag和finish()方法。

答案 2 :(得分:0)

你不能在android中禁用onCreate()方法,但你可以像使用onStart()一样覆盖它。

我建议你看一下片段或活动的生命周期,具体取决于你使用的是什么。

片段: http://developer.android.com/guide/components/fragments.html

活动: http://developer.android.com/reference/android/app/Activity.html

如果没有更多的代码,很难理解问题究竟是什么,但是当按下后退按钮时,onCreate中的代码基本上不会被调用,因为活动将暂停,直到手机需要更多资源然后销毁它。如果一个活动被破坏,那么将调用onCreate方法,你无法做任何改变。

如果我的回答没有帮助,请提供更多示例代码。

答案 3 :(得分:0)

  

您可以创建一个新功能来运行进程并调用   它在onCreate上并使用布尔标志来确保何时返回   检查该活动和标志,不调用该函数。然后   在savedPreference onPause()方法中保存flag的值,你就是   done和onCreate()方法加载保存的首选项。

     

像这样的东西

boolean flag = false;

@Override
public void onResume()
{
   super.onResume();
   // load savedPreferences
}

@Override
public void onPause()
{
   super.onPause();
   //save savedPreferences
}

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    if(flag == false)
    {
        //function call
        processes();
    }
}

private void processes()
{
    flag = true;
    // do stuff here
}

答案 4 :(得分:0)

如果您的所有卡片都有不同的活动,则后门按钮应该可以正常工作。但是,如果您的活动被带到前面,除了onresume之外,不会重新加载任何内容。在onresume中,您可以执行新的加载结构或您想要实现的内容。

如果没有不同的活动,请使用onBackPressed()处的覆盖,它将处理后退按钮。

但是要提供一些代码以获得更好的答案