Saltar al contenido

Cómo usar el enlace de vista en Android

Solución:

Hay un par de cosas que debe hacer y trato de organizarlas y enumerarlas: (Según los documentos de los desarrolladores de Android de este enlace y mis experiencias personales)

  1. Necesitas usar Android Studio 3.6 canary11 + (actualmente estoy usando Android Studio 4 y me está haciendo bien el trabajo)

    Puede encontrarlo desde aquí: https://developer.android.com/studio/archive

  2. Necesita actualizar su contenedor de Gradle a Gradle “5.6.4” y la herramienta de compilación de Gradle a “3.6.0-rc01”, las versiones superiores también funcionan, así que no tenga miedo de ser actualizado.

    distributionUrl=https://services.gradle.org/distributions/gradle-5.6.4-all.zip
    dependencies {

        ...
        classpath 'com.android.tools.build:gradle:3.6.0-rc01'

    }
  1. Para habilitar el enlace de vista en un módulo, agregue el elemento viewBinding a su archivo build.gradle, como se muestra en el siguiente ejemplo:
    android {
    ...
    buildFeatures {
        viewBinding true
    }
}
  1. Si desea que se ignore un archivo de diseño al generar clases de enlace, agregue el tools:viewBindingIgnore="true" atributo a la vista raíz de ese archivo de diseño:
    <LinearLayout
        ...
        tools:viewBindingIgnore="true" >
        ...
    </LinearLayout>
  1. Si el enlace de vista está habilitado para un módulo, se genera una clase de enlace para cada archivo de diseño XML que contiene el módulo. Cada clase de enlace contiene referencias a la vista raíz y todas las vistas que tienen un ID. El nombre de la clase de enlace se genera convirtiendo el nombre del archivo XML a caja camel y agregando la palabra “Binding” al final.

    Por ejemplo, dado un archivo de diseño llamado result_profile.xml:

    <LinearLayout ... >
        <TextView android:id="@+id/name" />
        <ImageView android:cropToPadding="true" />
        <Button android:id="@+id/button"
            android:background="@drawable/rounded_button" />
    </LinearLayout>

La clase de enlace generada se llama ResultProfileBinding. Esta clase tiene dos campos: a TextView llamado name y un Button llamado button. los ImageView en el diseño no tiene ID, por lo que no hay referencia a él en la clase de enlace.

Cada clase de enlace también incluye un getRoot() método, proporcionando una referencia directa para la vista raíz del archivo de diseño correspondiente. En este ejemplo, el getRoot() método en el ResultProfileBinding clase devuelve el LinearLayout vista raíz.

  1. Para configurar una instancia de la clase de enlace para su uso con una actividad, fragmento o adaptador de vista de tarjeta, realice los siguientes pasos:
  • en el método onCreate () de la actividad:
    private ResultProfileBinding binding;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = ResultProfileBinding.inflate(getLayoutInflater());
    View view = binding.getRoot();
    setContentView(view);
}
  • en el método onCreateView () de los fragmentos:
    private FragmentHousesBinding binding;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        binding = FragmentHousesBinding.inflate(inflater, container, false);

        init();

        return binding.getRoot();
    }
  • en el método onCreateViewHolder () del adaptador de vista de tarjeta:
    HouseCardPropertyFragmnetBinding binding;

    @Override
    public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        binding = HouseCardPropertyFragmnetBinding.inflate(LayoutInflater
            .from(parent.getContext()), parent, false);

        return new Holder(binding);
    }

    @Override
    public void onBindViewHolder(@NonNull HouseAdapter.Holder holder, int position) {
        holder.bindData(getItem(position));
    }

    class Holder extends RecyclerView.ViewHolder {

        HouseCardPropertyFragmnetBinding view;

        Holder(@NonNull HouseCardPropertyFragmnetBinding v) {
            super(v.getRoot());
            view = v;
        }

        void bindData(Tag item) {
            view.tagTxt.setText(item.Name);

        }
    }

eso es todo, estás libre de la findViewById de aquí en adelante 😉

ViewBinding solo está disponible desde Android Studio 3.6 y superior

1: – Necesita actualizar su herramienta de construcción de Gradle a 3.6.1 en build.gradle (nivel de proyecto)

 dependencies {
        classpath 'com.android.tools.build:gradle:3.6.1'
             }

2: – Necesita habilitar viewBinding en build.gradle (aplicación)

 android {
viewBinding {
    enabled = true
}}

Una vez que se habilita el enlace de vista, se genera una clase de enlace para cada diseño XML. El nombre de la clase de enlace se genera convirtiendo el nombre del archivo XML a caja camel y agregando la palabra “Binding” al final.

Ejemplo: – si un archivo de diseño se denomina “add_item_activity.xml“entonces la clase Name of Binding será”AddItemActivityBinding

3: -Para configurar una instancia de la clase de enlace para su uso con una actividad, cree una instancia de la clase de enlace, aquí crearemos una instancia de “AddItemActivityBinding“y llamará a la estática inflar método generado en la clase de enlace

Obtenga una referencia a la vista raíz llamando al método getRoot () y pase esta vista raíz en el método setContentView ()

public class AddItemActivity extends AppCompatActivity {
    private AddItemActivityBinding binding;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = AddItemActivityBinding.inflate(getLayoutInflater());
        View view = binding.getRoot();
        setContentView(view);

        //now we can access views by their IDs 
        binding.tvTitleMyOrder.setText("Title goes here");

    }

}

Ahora podemos acceder a las vistas por sus ID utilizando la instancia de la clase de enlace

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *