代码之家  ›  专栏  ›  技术社区  ›  user1209216

Android-在活动结束时设置活动结果

  •  3
  • user1209216  · 技术社区  · 7 年前

    Intent intent = new Intent(MainActivity.this, DetailsActivity.class);
    startActivityForResult(intent,EVENT_DETAILS_REQUEST);
    

    在我的DetailsActivity中,要设置可用于主要活动的结果和附加:

    @Override
        public void onBackPressed()
        {
            Intent resultIntent = new Intent();
            resultIntent.putExtra("isEdited",isEdited);
            setResult(RESULT_OK,resultIntent);
            finish();
        }
    

    最后,在MainActivity中:

    @Override
        protected void onActivityResult(int requestCode, int resultCode, @NonNull Intent data)
    {
      switch(requestCode)
      {
        ......
        case EVENT_DETAILS_REQUEST:
        boolean isEdited = data.getBooleanExtra("isEdited", false);
        .......
        break;
    
      }
    
    }
    

    只要用户使用“后退”硬件(或系统导航栏)按钮关闭DetailsActivity,这就可以了。如果用户点击活动顶部的“后退”箭头以关闭活动, onBackPressed onActivityResult 数据将为空。

    我试着使用 onPause , onStop , onFinish 而不是 管理它工作,但我正在 data 始终为空。

    解决我的问题的正确方法是什么?

    4 回复  |  直到 7 年前
        1
  •  4
  •   Manoj Bhadane    7 年前
    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        switch (item.getItemId())
        {
            case android.R.id.home:
                onBackPressed();
                return true;
    
            default:
                return super.onOptionsItemSelected(item);
        }
    }
    

    在详细信息活动中重写此方法。。。这个代码

        2
  •  2
  •   user3161880    7 年前

    您可以这样做以在所有可能的关闭案例中发送结果:

    @Override
    public void finish() {
        Intent data = new Intent();
        Intent resultIntent = new Intent();
        resultIntent.putExtra("isEdited", isEdited);
        setResult(RESULT_OK, resultIntent);
        super.finish();
    }
    
        3
  •  1
  •   Vinayak B    7 年前

    将此添加到您的DetailsActivity中

    @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            int id = item.getItemId();
            if (id == android.R.id.home) {
           Intent resultIntent = new Intent();
            resultIntent.putExtra("isEdited",isEdited);
            setResult(RESULT_OK,resultIntent);
                finish();
            }
            return super.onOptionsItemSelected(item);
        }
    
        4
  •  0
  •   Omar Dhanish    7 年前

    当硬件被压回时,会自动调用。。

    public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK) {
    
                 //your code here   
    
                return true;
            }
            return super.onKeyDown(keyCode, event);
        }