ti-enxame.com

Como o método getView () é usado e para onde está sendo chamado?

Eu sou novo no desenvolvimento do Android e segui os tutoriais disponíveis no site Android). Atualmente, estou na seção de tutoriais do Views, especificamente o para visualizações em grade: Olá, Tutorial de visualização em grade .

Estou tendo problemas para entender como as visualizações são feitas por meio de um adaptador. Entendo que você deve substituir o método getView () na classe do adaptador e, neste método, é onde você define como suas Views são configuradas. O que eu não entendo é onde é chamado getView ()? Talvez eu tenha o tipo errado de mentalidade aqui, mas no código abaixo (tutorial do Grid View) não vejo nenhuma chamada para getView () (ou qualquer outra coisa usada na classe do 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
    };
}
21
amandion

Ao configurar o Adapter, você está dizendo ao GridView para buscar visualizações do Adapter para preencher todas as grades. Então getView é chamado internamente pelo GridView para preencher o layout.

É por isso que todos os adaptadores implementam Adapterinterface para que qualquer AdapterView possa solicitar o adaptador.

17
bhups

Adapter.getView é chamado dentro do método ObtainView, herdado de GridView classe pai AbsListView, com objetos ScrapView passados ​​quando disponíveis:

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

Então ObtainView é implementado em GridView.onMeasure diretamente, mas também em vários outros retornos de chamada que invocam GridView.layoutChildren, incluindo o método onTouchEvent herdado que lida com rolagem, arremesso e outra navegação por toque.

5
Trent Steele