fragment里层级套的太深没办法执行onactivityresult怎么办

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fragment里层级套的太深没办法执行onactivityresult怎么办相关的知识,希望对你有一定的参考价值。

参考技术A 常见的,会在FragmentActivity中嵌套一层Fragment使用,甚至Fragment下层层嵌套使用。这个时候,在第二级或者更深级别的Fragment将无法收到onActivityResult回调,查看FragementActivity的源码发现:
public void startActivityFromFragment(Fragment fragment, Intent intent,
: int requestCode)
: if (requestCode == -1)
: super.startActivityForResult(intent, -1);
: return;
:
: if ((requestCode&0xffff0000) != 0)
: throw new IllegalArgumentException("Can only use lower 16 bits for requestCode");
:
: super.startActivityForResult(intent, ((fragment.mIndex+1)<<16) + (requestCode&0xffff));
:
: @Override
: protected void onActivityResult(int requestCode, int resultCode, Intent data)
: mFragments.noteStateNotSaved();
: int index = requestCode>>16;
: if (index != 0)
: index--;
: if (mFragments.mActive == null || index < 0 || index >= mFragments.mActive.size())
: Log.w(TAG, "Activity result fragment index out of range: 0x"
: + Integer.toHexString(requestCode));
: return;
:
: Fragment frag = mFragments.mActive.get(index);
: if (frag == null)
: Log.w(TAG, "Activity result no fragment exists for index: 0x"
: + Integer.toHexString(requestCode));
: else
: frag.onActivityResult(requestCode&0xffff, resultCode, data);
:
: return;
:
:
: super.onActivityResult(requestCode, resultCode, data);
:
参考技术B fragment里面有onActivityResult方法……

Fragment中RecyclerView的notifyDataSetChanged没作用解决

首先说一下,写这篇解决办法的原因,是因为当时遇到这个问题,网上随便一搜出来几篇的解决方法都是:在要刷新的时候重新new一个adapter

网上也大概讲了出现问题的原因是找不到“巴拉巴拉~”啥玩意儿来着,有兴趣的自己度。

这个方式好与不好我就不加评判了,我个人是觉得不能忍受。所以我理解的解决办法是:

在adapter中写个方法外部调用:

举个栗子:

public void freshAdapter(){
notifyDataSetChanged();
}

然后在fragment中数据修改后调用
tables.clear();
tables.addAll(newtables);
adapter.freshAdapter();

PS:其实作为半吊子我也不知道这样和adapter.notifyDataSetChanged()有啥区别,知道的大佬可以科普一下。可是这确实解决了问题。哈哈 ——— ———EnD
 









以上是关于fragment里层级套的太深没办法执行onactivityresult怎么办的主要内容,如果未能解决你的问题,请参考以下文章

Android的Fragment中onActivityResult不被调用的解决方案

金蝶怎么导出数据?

FragmentTabHost切换Fragment避免重新加载Fragment,即重复调用Fragment的onCreateView

fragment之间的信息交互——onActivityResult()不经过Activity

Fragment中RecyclerView的notifyDataSetChanged没作用解决

Hexo - 修改永久链接的默认格式