【问题标题】:Dismiss android activity displayed as Popup关闭显示为 Popup 的 android 活动
【发布时间】:2012-06-29 15:05:55
【问题描述】:

所以我有一个服务,它启动一个显示为弹出窗口的活动,感谢“android:style/Theme.Dialog”

此活动显示一个列表视图,其中包含应用程序列表。 在列表视图的每个元素上,都有应用程序的简短描述和两个按钮。 1 用于启动应用程序 2 用于显示带有更多信息的 toast。

这是我的服务中的代码:它启动活动

Intent intent = new Intent(this, PopUpActivity.class);
intent.addFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(intent);  

此活动使用自定义布局,带有列表视图,使用自定义 ArrayAdapter 进行调整

在这个适配器中,我在开始按钮上设置了一个动作来启动当前应用程序

Button lanceur = (Button) v.findViewById(R.id.Buttonlancer);
            lanceur.setOnClickListener(new View.OnClickListener() {

                public void onClick(View v) {
                    p.start(mcontext);
                }
            });

使用 p.start,我启动应用程序。

但是现在,如果我从应用程序中按“返回”,我会回到弹出窗口...我可以启动另一个应用程序。我不希望它成为可能。

这就是为什么我希望我可以关闭/销毁/完成我的 PopupActivity,但我无法使用我拥有的代码来做到这一点。

【问题讨论】:

    标签: android popup android-listview android-activity


    【解决方案1】:

    这可以通过startActivityForResult()onActivityResult() 完成

     Intent intent = new Intent(this, PopUpActivity.class);
     intent.addFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION);
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     getApplicationContext().startActivityForResult(intent,1); 
    
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         Log.d("CheckStartActivity","onActivityResult and resultCode = "+resultCode);
         // TODO Auto-generated method stub
         super.onActivityResult(requestCode, resultCode, data);
         this.finish();
     }
    

    并添加AndroidManifest.xml:

    <activity android:name=".PopUpActivity" android:noHistory="true" />

    【讨论】:

    • 谢谢,我希望我可以使用 startActivityForResult,但我的活动不是从另一个活动开始的,所以我不能使用它。我读过我可以开始一个“假”活动,女巫用“startActivityForResult”开始我的活动。这是个好主意吗?
    • @Sit :您发布的代码有问题,您正在使用 Intent 方式从另一个 Activity 或任何其他组件启动 PopUpActivity。因此,如果您是从任何其他组件启动弹出式活动,那么您是对的开始一个“假”活动。
    • 好的,谢谢,我已经完成了,感谢带有onActivityResult方法的FakeActivity;)
    【解决方案2】:

    在您的下一个Activity 调用start 之后,只需在显示为弹出窗口的Activity 中调用finish()

    【讨论】:

    • 谢谢,但是activity本身并没有启动popup,是通过按钮完成的,其代码在adapter中实现。
    【解决方案3】:

    像这样更改你的 luanch 代码:

    Button lanceur = (Button) v.findViewById(R.id.Buttonlancer);
    lanceur.setOnClickListener(new View.OnClickListener() {
    
        public void onClick(View v) {
            p.start(mcontext);
            finish();
        }
    });
    

    另外,您可能不需要在您的服务中调用 getApplicationContext() 可以粘贴更多代码吗?您应该能够使用NameOfYourService.this.startActivity(); 或者甚至可能只使用startActivity();,具体取决于您的结构。

    另请注意,根据Developer Docs,直接从服务启动 Activity 是一个非常糟糕的主意。看到这个问题的原因:Why service should not start activity?

    【讨论】:

    • 感谢我们的回答。我知道服务不应该启动弹出窗口或活动,但我正在做一个行为接近“短信弹出”的应用程序。目标是在接听电话或呼叫时显示弹出窗口。我无法按照您的建议在代码中添加“完成”,因为按钮的代码在 Adaptater 类中,它不扩展任何类型的活动:/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    相关资源
    最近更新 更多