片段中的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的主要内容,如果未能解决你的问题,请参考以下文章