【问题标题】:ANDROID Recieve message that another activity is destroyedANDROID 接收到另一个活动被破坏的消息
【发布时间】:2017-05-12 09:02:14
【问题描述】:

我有 2 个活动的简单应用程序。其中之一是透明的。所有过程看起来像:

1) 我午餐我的应用程序,一开始显示的是我的 MainActivity

2)我点击“显示透明活动”按钮,然后显示的是我的透明活动(在它下面仍然有点可见的是我的 MainActivity)

3) 在我的 TransparentActivity 关闭(杀死/销毁)之后,我单击“关闭透明 Activity”按钮,然后我创建并显示 Dialog(在我的 MainActivity 上方)。

我对最后一点 (3) 有疑问,我应该如何在关闭 TransparentActivity 后准确地构建和显示此对话框?我应该如何关闭这个透明应用程序?我应该完成()它还是建立 MainActivity 的意图?

【问题讨论】:

    标签: android dialog android-lifecycle activity-finish ondestroy


    【解决方案1】:

    你应该使用 startActivityForResult 方法。

    对于您的特定情况,您可以实现如下所示:

    MainActivity.java

    public class MainActivity extends AppCompatActivity {
        private static int REQUEST_CODE = 1234;
    
        @Override
        protected void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            final Button btnShowTransparencyActivity = (Button) findViewById(R.id.button);
            btnShowTransparencyActivity.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(final View view) {
                    final Intent intent = new Intent(MainActivity.this, TransparentActivity.class);
                    startActivityForResult(intent, REQUEST_CODE);
                }
            });
        }
    
        @Override
        protected void onActivityResult(final int requestCode, final int resultCode, Intent intent) {
            if (REQUEST_CODE == requestCode) {
                if (resultCode == Activity.RESULT_OK) {
                    Toast.makeText(this, "Show dialog", Toast.LENGTH_SHORT).show();
                } else if (resultCode == Activity.RESULT_CANCELED) {
                    Toast.makeText(this, "Don't show dialog", Toast.LENGTH_SHORT).show();
                }
            }
        }
    
    }
    

    TransparentActivity.java

    public class TransparentActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_transparent);
    
            final Button btnCloseTransparentActivity = (Button) findViewById(R.id.button);
            btnCloseTransparentActivity.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(final View view) {
                    final Intent intent = new Intent();
                    setResult(Activity.RESULT_OK, intent);
                    finish();
                }
            });
        }
    
        @Override
        public void onBackPressed() {
            final Intent intent = new Intent();
            setResult(Activity.RESULT_CANCELED, intent);
            super.onBackPressed();
        }
    }
    

    【讨论】:

    • 但是我应该使用什么 result_code 来获得关闭的活动?
    • 您可以使用RESULT_OKRESULT_CANCELED developer.android.com/training/basics/intents/result.html 此外,当TransparentActivity 启动时,MainActivity 生命周期将更改为onPause,并且当TransparentActivity 完成时,将调用MainActivity 的onResume
    • 您是否关注我提供给您的链接?很清楚你必须做什么
    • 是的,我为此苦苦挣扎了一段时间,我使用了生命周期方法,问题是它看起来像:当显示 transparentAvtivity 时,我的 MainActivity 进入 onPause 当我完成 TransparentActivity 调用是我的 onResume MainActivity 之后调用的是 TransparetAvtivity 的 onDestroy,但我尝试使用 StartActivityforResult
    • 所以我应该 setResult(RESULT_CANCELED) 同时关闭透明和 Main 我需要使用类似 if (requestCode == RESULT_CANCELED) { //Create dialog 的东西来构建 onActivityResult }
    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多