Open NUmeroAndDev opened 5 years ago
ViewBinding は Binding の仕組みがない。
ViewBinding はただ View を提供するだけ。
findViewById を置き換える場合に使う。
Kotlin Android Extensions を使ってる場合に、id がそのまま参照する変数名になっていたため、ViewBinding を使えば Snake な id でもきちんと Camel な変数に変えてくれる。
一部のライブラリ(ex.groupie)がサポートできていない。
Activity のコンストラクタ(AppCompatActivity(R.layout.hogehoge))に渡せない。
public final class ActivityVideoDetailBinding implements ViewBinding {
@NonNull
private final CoordinatorLayout rootView;
@NonNull
public final FrameLayout detailContainer;
@NonNull
public final FrameLayout playerContainer;
private ActivityVideoDetailBinding(@NonNull CoordinatorLayout rootView,
@NonNull FrameLayout detailContainer, @NonNull FrameLayout playerContainer) {
this.rootView = rootView;
this.detailContainer = detailContainer;
this.playerContainer = playerContainer;
}
@Override
@NonNull
public CoordinatorLayout getRoot() {
return rootView;
}
@NonNull
public static ActivityVideoDetailBinding inflate(@NonNull LayoutInflater inflater) {
return inflate(inflater, null, false);
}
@NonNull
public static ActivityVideoDetailBinding inflate(@NonNull LayoutInflater inflater,
@Nullable ViewGroup parent, boolean attachToParent) {
View root = inflater.inflate(R.layout.activity_video_detail, parent, false);
if (attachToParent) {
parent.addView(root);
}
return bind(root);
}
@NonNull
public static ActivityVideoDetailBinding bind(@NonNull View rootView) {
// The body of this method is generated in a way you would not otherwise write.
// This is done to optimize the compiled bytecode for size and performance.
String missingId;
missingId: {
FrameLayout detailContainer = rootView.findViewById(R.id.detailContainer);
if (detailContainer == null) {
missingId = "detailContainer";
break missingId;
}
FrameLayout playerContainer = rootView.findViewById(R.id.playerContainer);
if (playerContainer == null) {
missingId = "playerContainer";
break missingId;
}
return new ActivityVideoDetailBinding((CoordinatorLayout) rootView, detailContainer,
playerContainer);
}
throw new NullPointerException("Missing required view with ID: ".concat(missingId));
}
}
ただ、findViewById して変数として保持
Link
https://developer.android.com/topic/libraries/view-binding