@@ -42,7 +42,6 @@ public class RequestManagerRetriever implements Handler.Callback {
42
42
// Hacks based on the implementation of FragmentManagerImpl in the non-support libraries that
43
43
// allow us to iterate over and retrieve all active Fragments in a FragmentManager.
44
44
private static final String FRAGMENT_INDEX_KEY = "key" ;
45
- private static final String FRAGMENT_MANAGER_GET_FRAGMENT_KEY = "i" ;
46
45
47
46
/**
48
47
* The top application level RequestManager.
@@ -165,10 +164,9 @@ public RequestManager get(View view) {
165
164
// Support Fragments.
166
165
if (activity instanceof FragmentActivity ) {
167
166
Fragment fragment = findSupportFragment (view , (FragmentActivity ) activity );
168
- if (fragment = = null ) {
169
- return get (activity );
167
+ if (fragment ! = null ) {
168
+ return get (fragment );
170
169
}
171
- return get (fragment );
172
170
}
173
171
174
172
// Standard Fragments.
@@ -245,14 +243,29 @@ private android.app.Fragment findFragment(View target, Activity activity) {
245
243
246
244
// TODO: Consider using an accessor class in the support library package to more directly retrieve
247
245
// non-support Fragments.
246
+ @ TargetApi (Build .VERSION_CODES .O )
248
247
private void findAllFragmentsWithViews (
249
248
android .app .FragmentManager fragmentManager , ArrayMap <View , android .app .Fragment > result ) {
249
+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .O ) {
250
+ for (android .app .Fragment fragment : fragmentManager .getFragments ()) {
251
+ if (fragment .getView () != null ) {
252
+ result .put (fragment .getView (), fragment );
253
+ findAllFragmentsWithViews (fragment .getChildFragmentManager (), result );
254
+ }
255
+ }
256
+ } else {
257
+ findAllFragmentsWithViewsPreO (fragmentManager , result );
258
+ }
259
+ }
260
+
261
+ private void findAllFragmentsWithViewsPreO (
262
+ android .app .FragmentManager fragmentManager , ArrayMap <View , android .app .Fragment > result ) {
250
263
int index = 0 ;
251
264
while (true ) {
252
265
tempBundle .putInt (FRAGMENT_INDEX_KEY , index ++);
253
266
android .app .Fragment fragment = null ;
254
267
try {
255
- fragment = fragmentManager .getFragment (tempBundle , FRAGMENT_MANAGER_GET_FRAGMENT_KEY );
268
+ fragment = fragmentManager .getFragment (tempBundle , FRAGMENT_INDEX_KEY );
256
269
} catch (Exception e ) {
257
270
// This generates log spam from FragmentManager anyway.
258
271
}
0 commit comments