diff --git a/app/src/leanback/java/com/fongmi/android/tv/bean/Func.java b/app/src/leanback/java/com/fongmi/android/tv/bean/Func.java index bc7fa88fc..bf05616c6 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/bean/Func.java +++ b/app/src/leanback/java/com/fongmi/android/tv/bean/Func.java @@ -1,10 +1,10 @@ package com.fongmi.android.tv.bean; import android.annotation.SuppressLint; -import android.view.View; import com.fongmi.android.tv.R; import com.fongmi.android.tv.utils.ResUtil; +import com.fongmi.android.tv.utils.ViewUtil; public class Func { @@ -20,7 +20,7 @@ public class Func { public Func(int resId) { this.resId = resId; - this.id = View.generateViewId(); + this.id = ViewUtil.generateViewId(); this.setDrawable(); } diff --git a/app/src/main/java/com/fongmi/android/tv/utils/ViewUtil.java b/app/src/main/java/com/fongmi/android/tv/utils/ViewUtil.java new file mode 100644 index 000000000..e79afea81 --- /dev/null +++ b/app/src/main/java/com/fongmi/android/tv/utils/ViewUtil.java @@ -0,0 +1,29 @@ +package com.fongmi.android.tv.utils; + +import android.os.Build; +import android.view.View; + +import java.util.concurrent.atomic.AtomicInteger; + +public class ViewUtil { + + private static final AtomicInteger viewIdGenerator = new AtomicInteger(1); + + public static int generateViewId() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) return View.generateViewId(); + else return generateUniqueViewId(); + } + + private static int generateUniqueViewId() { + while (true) { + final int result = viewIdGenerator.get(); + // aapt-generated IDs have the high byte nonzero; clamp to the range under that. + int newValue = result + 1; + if (newValue > 0x00FFFFFF) newValue = 1; // Roll over to 1, not 0. + if (viewIdGenerator.compareAndSet(result, newValue)) { + return result; + } + } + } + +}