Как используется метод getView () и где он вызывается?

Я новичок в разработке для Android и следую инструкциям, доступным на веб-сайте Android. В настоящее время я нахожусь в разделе учебных пособий для представлений, в частности, для Grid Views: Здравствуйте, Grid View Tutorial .

У меня возникают проблемы с пониманием того, как представления создаются через адаптер. Я понимаю, что вы должны переопределить метод getView () в своем классе адаптера, и в этом методе вы определяете, как настраиваются ваши представления. Что я не понимаю, так это где getView () на самом деле вызывается? Возможно, у меня неправильный тип мышления, но в приведенном ниже коде (учебник Grid View) я не вижу вызовов getView () (или любых других вещей, используемых в классе адаптера, таких как getCount ()) .

Main.xml



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
задан seaplain 20 January 2013 в 23:32
поделиться

1 ответ

Установив адаптер, вы указываете GridView получать представления от адаптера, чтобы заполнить все сетки. Таким образом, getView внутренне вызывается GridView для заполнения макета.

Вот почему все адаптеры реализуют адаптер интерфейс, так что любой адаптер может запрашивать адаптер.

17
ответ дан 29 November 2019 в 21:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: