ViewBindingUtil
import android.view.LayoutInflater; import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.viewbinding.ViewBinding; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.Objects; public class ViewBindingUtil { public static <Binding extends ViewBinding> Binding create(Class<?> clazz, LayoutInflater inflater) { return create(clazz, inflater, null); } public static <Binding extends ViewBinding> Binding create(Class<?> clazz, LayoutInflater inflater, ViewGroup root) { return create(clazz, inflater, root, false); } @SuppressWarnings("unchecked") @NonNull public static <Binding extends ViewBinding> Binding create(Class<?> clazz, LayoutInflater inflater, ViewGroup root, boolean attachToRoot) { Class<?> bindingClass = getBindingClass(clazz); Binding binding = null; if (bindingClass != null) { try { Method method = bindingClass.getMethod("inflate", LayoutInflater.class, ViewGroup.class, boolean.class); binding = (Binding) method.invoke(null, inflater, root, attachToRoot); } catch (Exception e) { e.printStackTrace(); } } return Objects.requireNonNull(binding); } private static Class<?> getBindingClass(Class<?> clazz) { ParameterizedType parameterizedType = (ParameterizedType) clazz.getGenericSuperclass(); Type[] types = Objects.requireNonNull(parameterizedType).getActualTypeArguments(); Class<?> bindingClass = null; for (Type type : types) { if (type instanceof Class<?>) { Class<?> temp = (Class<?>) type; if (ViewBinding.class.isAssignableFrom(temp)) { bindingClass = temp; } } } return bindingClass; } }
BaseActivity
import android.os.Bundle; import android.view.LayoutInflater; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.viewbinding.ViewBinding; public abstract class BaseActivity<Binding extends ViewBinding> extends AppCompatActivity { protected Binding binding; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ViewBindingUtil.create(getClass(), LayoutInflater.from(this)); setContentView(binding.getRoot()); } }
参考链接: