Bläddra i källkod

generateViewId fix

Daniel Zlotin 8 år sedan
förälder
incheckning
166f540d5b

+ 19
- 1
android/app/src/main/java/com/reactnativenavigation/utils/ViewUtils.java Visa fil

@@ -5,6 +5,7 @@ import android.graphics.Color;
5 5
 import android.graphics.PorterDuff;
6 6
 import android.graphics.PorterDuffColorFilter;
7 7
 import android.graphics.drawable.Drawable;
8
+import android.os.Build;
8 9
 import android.util.DisplayMetrics;
9 10
 import android.view.View;
10 11
 import android.view.ViewTreeObserver;
@@ -41,7 +42,11 @@ public class ViewUtils {
41 42
     }
42 43
 
43 44
     public static int generateViewId() {
44
-        return viewId.incrementAndGet();
45
+        if (Build.VERSION.SDK_INT >= 17) {
46
+            return View.generateViewId();
47
+        } else {
48
+            return compatGenerateViewId();
49
+        }
45 50
     }
46 51
 
47 52
     public static float getScreenHeight() {
@@ -50,5 +55,18 @@ public class ViewUtils {
50 55
         wm.getDefaultDisplay().getMetrics(metrics);
51 56
         return metrics.heightPixels;
52 57
     }
58
+
59
+    private static int compatGenerateViewId() {
60
+        for (; ; ) {
61
+            final int result = viewId.get();
62
+            // aapt-generated IDs have the high byte nonzero; clamp to the range under that.
63
+            int newValue = result + 1;
64
+            if (newValue > 0x00FFFFFF) newValue = 1; // Roll over to 1, not 0.
65
+            if (viewId.compareAndSet(result, newValue)) {
66
+                return result;
67
+            }
68
+        }
69
+    }
70
+
53 71
 }
54 72