片段中的Android onActivityResult

Posted

技术标签:

【中文标题】片段中的Android onActivityResult【英文标题】:Android onActivityResult in fragment 【发布时间】: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 is not being called in Fragment的可能重复 首先它总是调用活动onActivityResult,然后你必须调用片段onActivityResult 从方法中删除超级。 是的。我不明白这个事件是从哪里来的。 DrawerActivity 中的值 requestCode 不会在应用程序的任何地方使用。 【参考方案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片段方法被调用

【讨论】:

以上是关于片段中的Android onActivityResult的主要内容,如果未能解决你的问题,请参考以下文章

Android中的片段事务问题

Android片段中的动态背景

如何用 ViewPager 中的另一个片段替换 Android 片段?

Android - 片段中的 getIntent()

如何在 Android 中的特定片段容器中显示片段

android片段-当另一个片段被推到它上面时如何保存片段中的视图状态