Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.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
Android 问题在于;标记“活动”清除“顶部”;_Android - Fatal编程技术网

Android 问题在于;标记“活动”清除“顶部”;

Android 问题在于;标记“活动”清除“顶部”;,android,Android,我使用以下功能从任何孩子返回主页(家庭活动)。 我的任务是,如果我们在任何子页面中,它应该进入主页,并希望显示一个警报框。 对于没有警报对话框的所有子页面,它都可以正常工作。 它在以下情况下使用警报对话框工作 例如:主页->儿童A 它将进入主页并显示警报对话框 如果我在多个子页面中,则它不适用于 例如:主页->子A->子B 它出现在主页上,没有焦点,但警报对话框没有显示。 根据我的任务,警报应为Cancelabe=false,因此,如果不单击警报对话框中的按钮,则无法返回 public void

我使用以下功能从任何孩子返回主页(家庭活动)。
我的任务是,如果我们在任何子页面中,它应该进入主页,并希望显示一个警报框。 对于没有警报对话框的所有子页面,它都可以正常工作。
它在以下情况下使用警报对话框工作
例如:主页->儿童A
它将进入主页并显示警报对话框

如果我在多个子页面中,则它不适用于 例如:主页->子A->子B
它出现在主页上,没有焦点,但警报对话框没有显示。
根据我的任务,警报应为Cancelabe=false,因此,如果不单击警报对话框中的按钮,则无法返回

public void ShowConnectivityMessage()
    {
        Intent intent = new Intent( this, Homepage.class );
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        this.startActivity( intent );

        new AlertDialog.Builder(this)
        .setTitle("Cannot Connect To Service")
        .setMessage("The service has been unreachable for 1 hour. ")
        .setCancelable(false)
        .setPositiveButton("Help me shut down the app", new DialogInterface.OnClickListener() 
        {
            @Override
            public void onClick(DialogInterface dialog, int which) 
            {
                if(Homepage.bIsLoggedInM)
                {
                    StartTimer();
                    ShowHowToQuitTheApp();
                }
            }
        }).show();
    }    

因此,请任何人帮助我………..

在清除顶部意图时,您还应指示将显示对话框:

public static void returnToHomepage(Context context) {
    Intent intent = new Intent( context, Homepage.class );
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    // This is new:
    intent.putExtra("isNetFail", true)

    context.startActivity( intent );
}
然后在中,如果定义了额外的,则使用生成并显示对话框。在
onResume()
中执行此操作,而不是手动实例化和显示对话框,可以让您遵循正确的操作,例如,在活动中管理对话框(按照设计),并确保主页活动在显示对话框时回到前台,从而避免任何泄漏的视图或窗口

protected void onResume() {
    // ...
    if (getIntent().getBooleanExtra("isNetFail", false)) {
        showDialog(DIALOG_NETWORK_FAIL);
    }
}
然后,当您想返回主页活动时(无论NChild处于活动状态),您可以调用:

Homepage.returnToHomepage(this);

最后,您不应该在主页活动中通过Handler进行30秒的轮询,因为一旦主页活动暂停/停止,您就无法保证它会继续存在。看见相反,我建议创建一个公共抽象
MyCommonActivity
类,您的所有NChildActivity都将扩展该类。该活动可以启动线程进行网络轮询。但是您需要在
onPause()
中停止它,然后在
onResume()
中恢复它。你现在所做的,意味着主页在后台工作,这是一个巨大的“不”,有几个原因。事实上,更合适的方法是设置一个负责检查网络连接的后台服务,或者使用一个来监听。

在CLEAR\u TOP Intent上,您还应该显示一个指示对话框:

public static void returnToHomepage(Context context) {
    Intent intent = new Intent( context, Homepage.class );
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    // This is new:
    intent.putExtra("isNetFail", true)

    context.startActivity( intent );
}
然后在中,如果定义了额外的,则使用生成并显示对话框。在
onResume()
中执行此操作,而不是手动实例化和显示对话框,可以让您遵循正确的操作,例如,在活动中管理对话框(按照设计),并确保主页活动在显示对话框时回到前台,从而避免任何泄漏的视图或窗口

protected void onResume() {
    // ...
    if (getIntent().getBooleanExtra("isNetFail", false)) {
        showDialog(DIALOG_NETWORK_FAIL);
    }
}
然后,当您想返回主页活动时(无论NChild处于活动状态),您可以调用:

Homepage.returnToHomepage(this);

最后,您不应该在主页活动中通过Handler进行30秒的轮询,因为一旦主页活动暂停/停止,您就无法保证它会继续存在。看见相反,我建议创建一个公共抽象
MyCommonActivity
类,您的所有NChildActivity都将扩展该类。该活动可以启动线程进行网络轮询。但是您需要在
onPause()
中停止它,然后在
onResume()
中恢复它。你现在所做的,意味着主页在后台工作,这是一个巨大的“不”,有几个原因。事实上,更合适的方法是设置负责检查网络连接的后台服务,或者使用a来收听。

对于每个孩子,您必须为android back按钮编写方法,并将其设置为Homepage,以便您可以轻松地从每个孩子移动到Homepage。

对于每个孩子,您必须为android back按钮编写方法,并将其设置为Homepage,以便您可以轻松地从每个孩子移动到Homepage。

我建议您从主页活动而不是子活动调用警报对话框。通过这种方式,它将正常工作,其次,您不必在每个孩子身上都使用相同的对话框代码(通过这样做,您将创建一个维护噩梦,只需对对话框进行一次更改,您将需要通过所有屏幕进行更改..).

我的建议是从主页活动调用警报对话框,而不是子活动。通过这种方式,它将正常工作,其次,您不必在每个孩子身上创建相同的对话框代码(通过这样做,您将创建一个维护噩梦,对对话框进行一次更改,您将需要通过所有屏幕来更改它。)

不,我只在主页中创建AlertDialog,而不是在NChild中创建AlertDialog。实际上,这个函数在主页中每隔30秒由处理程序调用一次。如果net不可用,则将调用此函数,它将关闭所有子项并在主页中显示警报。在这种情况下,从后台的活动调用
startActivity()
是非常奇怪的(Android不保证任何暂停/停止的活动都会保留在内存中,因此您的处理程序技术不可靠)。更糟糕的是,在显示对话框之前调用
startActivity()(注意logcat,你可能已经看到了我指的stacktrace)。我会根据这个新的假设更新我的答案。不,我只是在主页中创建AlertDialog,而不是在NChild中。实际上,处理程序在主页中每隔30秒调用一次此函数。如果网络不可用,则会调用此函数,它将关闭所有子项,并在主页中显示警报。在这种情况下,非常简单ge从后台的活动调用
startActivity()
(Android do