代码之家  ›  专栏  ›  技术社区  ›  IIRed-DeathII

发送标志以完成任何其他类的活动

  •  -1
  • IIRed-DeathII  · 技术社区  · 10 年前

    我有一个类(非活动),它在后台有一堆活动。有时,我想从堆栈中关闭一个旧的活动,但大多数时候这些活动都在后台,如果我使用 finish() ,它不起作用。

    所以,我在考虑使用 putExtra 将消息发送到该活动,以便它可以在 onResume() .

    我试图这样做,但没有成功:

    在我的NoActivity.class上:

    public void removeActivityFromStack(Activity activity){
        for(int i = mActivityStack.size(); i>0; i--){
            if(mActivityStack.get(i - 1).equals(activity)){
                mActivityStack.remove(i-1);
                activity.getIntent().putExtra(CLOSE_ACTIVITY, true);
            }
        }
    }
    

    MyActivity .类别:

    @Override
    protected void onResume() {
        super.onResume();
        Bundle bundle = getIntent().getExtras();
        if(bundle != null && bundle.getBoolean(getString(R.string.bundle_cerrar_activity), false)){
            this.finish();
        }
    }
    

    任何帮助都将不胜感激。


    我还尝试使用 BroadcastReceiver 关闭这些活动,但仍然不起作用。我试了下一种方法:

    在我的NoActivity.class上

        public void removeActivityFromStack(Activity activity){
            for(int i = mActivityStack.size(); i>0; i--){
                if(mActivityStack.get(i - 1).equals(activity)){
                    IntentFilter filter = new IntentFilter();
                    CloseActivitiesBroadcastReceiver baseActivityReceiver = new CloseActivitiesBroadcastReceiver();
                    filter.addAction(CLOSE_ACTIVITY);
                    current.registerReceiver(baseActivityReceiver, filter);
                    current.sendBroadcast(new Intent(CLOSE_ACTIVITY));
                    mActivityStack.remove(i-1);
                }
            }
        }
    

    在CloseActivitiesBroadcastReceiver.java上:

    public class CloseActivitiesBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(context.getString(R.string.bundle_cerrar_activity))) {
                ((Activity)context).finish();
            }
        }
    }
    
    2 回复  |  直到 10 年前
        1
  •  0
  •   Silvans Solanki    10 年前

    尝试在活动中使用广播接收器来完成, 1) 注册活动以侦听完成事件。 2) 发送活动将收到的广播,活动将自行完成。

    希望这将有助于解决您的问题。

    谢谢

        2
  •  0
  •   IIRed-DeathII    10 年前

    好吧,这是一个有点脏的答案,但这是我唯一能做的。如果有人得到更好的答案,就把它贴出来。

    在我的NoActivity.class上:

    public void removeActivityFromStack(Activity activity){
        for(int i = 0; i<mActivityStack.size(); i++){
            if(mActivityStack.get(i).equals(activity)){
                activity.finish()
                mActivityStack.remove(i);
            }
        }
    }
    

    这样,如果活动处于前台,将在 finish() 否则,它根本关不上。但对于这种情况:

    在MyActivity.class上:

        @Override
        protected void onResume() {
            super.onResume();
            if(!mNoActivityInstance.getActivityStack().contains(this)){
                finish();
            }
        }
    

    在我的情况下,没有活动。类作为Singleton工作