Я новичок в разработке для 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
};
}
Установив адаптер, вы указываете GridView получать представления от адаптера, чтобы заполнить все сетки. Таким образом, getView
внутренне вызывается GridView для заполнения макета.
Вот почему все адаптеры реализуют адаптер
интерфейс, так что любой адаптер может запрашивать адаптер.