tipos studio sgoliver seleccionar recyclerview item adaptadores android android-widget

android - studio - ¿Cómo se usa el método getView() y dónde se llama?



sgoliver listview (2)

Soy nuevo en el desarrollo de Android y he seguido los tutoriales disponibles en el sitio web de Android. Actualmente estoy en la sección de tutoriales para vistas, específicamente la de Grid Views: Hello, Grid View Tutorial .

Tengo problemas para entender cómo se realizan las vistas a través de un adaptador. Entiendo que debe anular el método getView () en su clase de adaptador y en este método es donde define cómo se configuran sus Vistas. Lo que no entiendo es ¿de dónde se llama en realidad a getView ()? Quizás tengo un tipo de mentalidad equivocada aquí, pero en el código a continuación (el tutorial de Grid View) no veo ninguna llamada a getView () (o cualquier otra cosa utilizada en la clase de adaptador como getCount ()) .

Main.xml

<?xml version="1.0" encoding="utf-8"?> <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gridview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:columnWidth="90dp" android:numColumns="auto_fit" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:stretchMode="columnWidth" android:gravity="center" />

Start.java

package com.examples.hellogridlayout; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.GridView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; public class Start extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); GridView gridview = (GridView)findViewById(R.id.gridview); gridview.setAdapter(new ImageAdapter(this)); gridview.setOnItemClickListener(new OnItemClickListener(){ public void onItemClick(AdapterView<?> parent,View v, int position, long id){ Toast.makeText(Start.this, "" + position,Toast.LENGTH_SHORT).show(); } }); } }

ImageAdapter.java

package com.examples.hellogridlayout; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; public class ImageAdapter extends BaseAdapter { private Context mContext; public ImageAdapter(Context c) { mContext = c; } public int getCount() { return mThumbIds.length; } public Object getItem(int position) { return null; } public long getItemId(int position) { return 0; } // create a new ImageView for each item referenced by the Adapter public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView; if (convertView == null) { // if it''s not recycled, initialize some attributes imageView = new ImageView(mContext); imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setPadding(8, 8, 8, 8); } else { imageView = (ImageView) convertView; } imageView.setImageResource(mThumbIds[position]); return imageView; } // references to our images private Integer[] mThumbIds = { R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4, R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7, R.drawable.sample_0, R.drawable.sample_1, R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4, R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7, R.drawable.sample_0, R.drawable.sample_1, R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4, R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7 }; }


Al configurar el Adaptador, le está diciendo a GridView que obtenga vistas del Adaptador para llenar todas las cuadrículas. Por getView tanto, a getView se le llama internamente a getView para completar el diseño.

Es por eso que todos los adaptadores implementan la interface Adapter para que cualquier AdapterView pueda solicitar el Adaptador.


Adapter.getView se llama dentro del método ObtainView , heredado de la clase primaria GridView AbsListView , con objetos ScrapView pasados ​​cuando están disponibles:

child = mAdapter.getView(position, scrapView, this);

Luego, se implementa ObtainView en GridView.onMeasure directamente, pero también en varias devoluciones de llamadas que invocan GridView.layoutChildren , incluido el método heredado onTouchEvent que maneja el desplazamiento, el fling y otros onTouchEvent táctiles.