【问题标题】:Android onActivityResult in fragment片段中的Android onActivityResult
【发布时间】:2019-01-23 09:53:25
【问题描述】:

我尝试在片段中获取结果。 片段中的代码

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (resultCode != Activity.RESULT_OK) return

    val bundle = data?.extras
    when (requestCode) {
        LicenseActivationActivity.REQUEST_RESULT_COUNT_ENTERPRISE ->
     //
    }
}

调用此代码。也是 DrawerActivity 中的 onActivityResult 方法

onActivityResult 是否只在片段中被调用?

更新

DrawerActivity 中的这段代码

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (resultCode == Activity.RESULT_OK) {
        WayBillsActivity.start(this)
        finish()
    }
}

由于某种原因,它也满足了,但只是在fragment中的onActivityResult之后。

【问题讨论】:

  • 首先它总是调用活动onActivityResult,然后你必须调用片段onActivityResult
  • 从方法中删除超级。
  • 是的。我不明白这个事件是从哪里来的。 DrawerActivity 中的值 requestCode 不会在应用程序的任何地方使用。

标签: android kotlin fragment startactivityforresult


【解决方案1】:

片段中的onActivityResult 仅在活动中的此类方法之后调用。如果您只想在活动上或仅在片段中处理结果 - 也许最好在不同情况下使用不同的结果代码(如果我正确理解您的问题)

【讨论】:

    【解决方案2】:

    在你的活动中调用这个

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        for (Fragment fragment : getSupportFragmentManager().getFragments()) {
            fragment.onActivityResult(requestCode, resultCode, data);
        }
    }
    

    然后在片段中调用

     @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
      //super.onActivityResult(requestCode, resultCode, data); comment this unless you 
    
     }
    

    【讨论】:

    • 它对我很有效!我在 kotlin 中使用了这个。源代码是这样的: override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) for (fragment in supportFragmentManager.fragments) { fragment.onActivityResult(requestCode, resultCode , 数据) } }
    • 这对我有用
    【解决方案3】:

    代码中的一切似乎都很好。您是否检查过调试器,因为我已经在我的片段中实现了相同的功能并且它工作正常

     @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
    
            if (resultCode == RESULT_OK) {
                switch (requestCode) {
                    case REQ_CODE_EDIT_PROFILE:
                        userModel = data.getExtras().getParcelable(UserModel.class.getSimpleName());
                        setData();
                        break;
                }
            }
        }
    

    【讨论】:

      【解决方案4】:

      在抽屉活动中添加代码

      override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
         fragment.super.onActivityResult(requestCode, resultCode, data)
      
      }
      
         **fragment.super.onActivityResult(requestCode, resultCode, data)**
      

      然后你的onActivityResult片段方法被调用

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-01
        • 2014-09-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多