2010-09-01 23 views
21

Android geliştirmede yeni ve Android web sitesinde bulunan eğiticileri takip ediyorum. Şu anda Görünümler için öğreticilerin bölümünde, özellikle de Grid Views: Hello, Grid View Tutorial.getView() yöntemi nasıl kullanılır ve nereden çağrılır?

Görünümler bir bağdaştırıcı aracılığıyla nasıl yapıldığını anlama konusunda sorun yaşıyorum. Bağdaştırıcı sınıfınızda getView() yöntemini geçersiz kılmanız gerektiğini ve bu yöntemde Görünümlerinizin nasıl ayarlandığını tanımladığınızı anlıyorum. Anlamadığım şey getView() 'ın gerçekten arandığı yerdir? Belki de burada yanlış bir zihniyet var, ama aşağıdaki kodda (Grid View öğreticisi) getView() (veya getCount() gibi bağdaştırıcı sınıfında kullanılan başka herhangi bir çağrı görmüyorum) .

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(); 
     } 

     }); 
    } 
} 

Adaptör ayarlayarak

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 
    }; 
} 

cevap

17

, sen doldurmak için Bağdaştırıcısından görüşlerini almak için GridView anlatıyorsun ImageAdapter.java tüm ızgaraları kapatın. Dolayısıyla, düzeni doldurmak için getView dahili olarak GridView tarafından çağrılır.

Bu nedenle tüm bağdaştırıcılar, herhangi bir Bağdaştırıcı'nın Bağdaştırıcıyı isteyebilmesi için Adapterinterface uygular.

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

ObtainView direkt olarak değil, aynı zamanda GridView.layoutChildren çağırmak çok daha fazla geri aramalar GridView.onMeasure uygulanan: ScrapView kullanılabilir içinde geçirilen nesnelerle

5

Adapter.getView, GridView üst sınıfı AbsListView miras ObtainView yöntem içinde adı kaydırma, atma ve diğer dokunma gezinme özelliklerini işleyen onTouchEvent yöntemini içeren bir yöntem.

İlgili konular