我使用以下功能从任何孩子返回主页(家庭活动)
我的任务是,如果我们在任何子页面,它应该来到主页,并希望显示一个警告框。
它在没有警告对话框的情况下适用于所有子页面
它用于跟踪具有警报对话框的情况
例如:主页 - >孩子A
它进入主页并显示警告对话框
如果我在一个以上的子页面中,它不起作用
例如:主页 - >孩子A - >孩子B
它来到HomePage并且变得没有重点,但警告对话框没有显示
根据我的任务,警报应该是cancellabe = 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();
}
所以请任何人帮助我.................
答案 0 :(得分:1)
在CLEAR_TOP意图上,您还应该set an extra表示将显示对话框:
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 );
}
然后在Homepage#onResume()中,如果定义了该额外内容,则使用showDialog()构建并显示该对话框。在onResume()
中执行此操作而不是手动实例化和显示对话框允许您遵循正确的Android Activity Lifecycle - 例如,管理活动内的对话框(按照设计),并确保主页活动在显示对话框时回到前台,从而避免任何泄漏的视图或窗口。
protected void onResume() {
// ...
if (getIntent().getBooleanExtra("isNetFail", false)) {
showDialog(DIALOG_NETWORK_FAIL);
}
}
然后,当您想要返回主页活动时(无论NChild处于活动状态),您可以致电:
Homepage.returnToHomepage(this);
最后,您不应该在您的主页活动中通过处理程序进行30秒轮询,因为一旦主页活动暂停/停止,您就不再保证它会一直存在。见Multitasking the Android Way。相反,我建议创建一个共同的抽象MyCommonActivity
类,所有的NChildActivity都会扩展。该活动可以启动一个线程来进行网络轮询。但您需要在onPause()
中将其停止,然后在onResume()
中恢复。你目前在做什么,暗示着主页在后台工作时正在工作,这是一个巨大的禁忌,原因有几个。实际上,更合适的方法是设置负责检查网络连接的后台服务,或者使用BroadcastReceiver来监听network connectivity changes。
答案 1 :(得分:1)
对于每个孩子你必须为android后退按钮编写方法,然后设置为主页,这样每个孩子都可以轻松移动到主页。
答案 2 :(得分:1)
我建议您从主页活动而不是子活动中调用警报对话框。这样它就可以正常工作,其次你不必在你的每个孩子中制作相同的对话框代码(通过这样做你创建一个维护噩梦,一个单一的对话框,你需要通过所有的屏幕来改变它..)。