web-dev-qa-db-fra.com

Comment la méthode GeveView () utilisée et où est-elle appelée?

Je suis nouveau à Android Développement et suivez les tutoriels disponibles sur le site Android Site Web. Je suis actuellement sur la section des tutoriels pour les vues, plus particulièrement celui de celui-ci. Pour les vues de la grille: Bonjour, Tutoriel de la grille .

J'ai du mal à comprendre comment les vues sont faites via un adaptateur. Je comprends que vous devez remplacer la méthode GeveView () de votre classe Adapter et dans cette méthode est l'endroit où vous définissez la manière dont vos points de vue sont configurés. Ce que je ne comprends pas, c'est où GeveView () est-il appelé? Peut-être que j'ai un mauvais type de mentalité ici, mais dans le code ci-dessous (le tutoriel de la grille), je ne vois aucun appels à GeveView () (ou à toute autre chose utilisée dans la classe d'adaptateur telle que 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

En définissant un adaptateur, vous indiquez à GridView d'aller chercher des vues de l'adaptateur pour remplir toutes les grilles. Donc, getView est appelé intérieurement par GridView pour combler la mise en page.

C'est pourquoi tous les adaptateurs implémentent Adapterinterface Pour que tout adaptateur puisse demander à l'adaptateur.

17
bhups

Adapter.getView est appelé à l'intérieur ObtainView méthode, héritée de GridView classe parente AbsListView, avec des objets Scrapview sont passés lorsqu'ils sont disponibles:

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

Alors ObtainView est mis en œuvre dans GridView.onMeasure directement mais aussi dans plusieurs autres rappels invoqués GridView.layoutChildren, y compris hérité onTouchEvent méthode qui gère les défilements, les flanques et autres navigations tactiles.

5
Trent Steele