我先把代码贴上来
public class GridViewActivity2 extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gridview2);
GridView gridview = (GridView) findViewById(R.id.gridview1gridview);
gridview.setBackgroundResource(R.drawable.bg);
gridview.setAdapter(new ImageAdapter2(this));
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
Toast.makeText(GridViewActivity2.this,
"你选择了" + (position + 1) + " 号图片", Toast.LENGTH_SHORT)
.show();
}
});
}
}
class ImageAdapter2 extends BaseAdapter {
private Context mContext;
private Integer[] mImageIds = { R.drawable.android1,
R.drawable.android2, R.drawable.android3, R.drawable.android4,
R.drawable.ic_launcher, R.drawable.computer, R.drawable.vs,
R.drawable.gc, R.drawable.eclipse, R.drawable.pdf,
R.drawable.word, R.drawable.war, R.drawable.net }; public ImageAdapter2(Context c) {
mContext = c;
} public int getCount() {
return mImageIds.length;
} public Object getItem(int position) {
return null;
} public long getItemId(int position) {
return 0;
} public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = null;
TextView textView = null;
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(new GridViewActivity2());
convertView = (View) inflater.inflate(R.layout.griditem2, null);
}
imageView = (ImageView) convertView
.findViewById(R.id.griditem2imageview);
textView = (TextView) convertView
.findViewById(R.id.griditem2textview);
imageView.setImageResource(mImageIds[position]);
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
textView.setText("title");
return convertView;
}
}①
//如果我把ImageAdapter2作为内部类写在Activity中,就一切OK。如下
//LayoutInflater inflater = (LayoutInflater) GridViewActivity2.this.getLayoutInflater();
②
//如果ImageAdapter2不作为内部类,而是作为另外的一个独立的类,我用new的方式生成LayoutInflater对象却报错了
//LayoutInflater inflater = (LayoutInflater)new GridViewActivity2().getLayoutInflater();
/*
错误信息
java.lang.NullPinterException
at android.app.Activity.getLayoutInflater(Activity.java:2769)
at my.android.activity.ImageAdapter2.getView(GridViewActivity2.java:75)
*/
③
//如果ImageAdapter2不作为内部类,而是作为另外的一个独立的类,我用from这个方法生成LayoutInflater对象也报错了
//LayoutInflater inflater = LayoutInflater.from(new GridViewActivity2());
/*
错误信息
java.lang.IllegalStateException: System services not available to Activities before onCreate()
*/
急求解答!!!
public class GridViewActivity2 extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gridview2);
GridView gridview = (GridView) findViewById(R.id.gridview1gridview);
gridview.setBackgroundResource(R.drawable.bg);
gridview.setAdapter(new ImageAdapter2(this));
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
Toast.makeText(GridViewActivity2.this,
"你选择了" + (position + 1) + " 号图片", Toast.LENGTH_SHORT)
.show();
}
});
}
}
class ImageAdapter2 extends BaseAdapter {
private Context mContext;
private Integer[] mImageIds = { R.drawable.android1,
R.drawable.android2, R.drawable.android3, R.drawable.android4,
R.drawable.ic_launcher, R.drawable.computer, R.drawable.vs,
R.drawable.gc, R.drawable.eclipse, R.drawable.pdf,
R.drawable.word, R.drawable.war, R.drawable.net }; public ImageAdapter2(Context c) {
mContext = c;
} public int getCount() {
return mImageIds.length;
} public Object getItem(int position) {
return null;
} public long getItemId(int position) {
return 0;
} public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = null;
TextView textView = null;
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(new GridViewActivity2());
convertView = (View) inflater.inflate(R.layout.griditem2, null);
}
imageView = (ImageView) convertView
.findViewById(R.id.griditem2imageview);
textView = (TextView) convertView
.findViewById(R.id.griditem2textview);
imageView.setImageResource(mImageIds[position]);
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
textView.setText("title");
return convertView;
}
}①
//如果我把ImageAdapter2作为内部类写在Activity中,就一切OK。如下
//LayoutInflater inflater = (LayoutInflater) GridViewActivity2.this.getLayoutInflater();
②
//如果ImageAdapter2不作为内部类,而是作为另外的一个独立的类,我用new的方式生成LayoutInflater对象却报错了
//LayoutInflater inflater = (LayoutInflater)new GridViewActivity2().getLayoutInflater();
/*
错误信息
java.lang.NullPinterException
at android.app.Activity.getLayoutInflater(Activity.java:2769)
at my.android.activity.ImageAdapter2.getView(GridViewActivity2.java:75)
*/
③
//如果ImageAdapter2不作为内部类,而是作为另外的一个独立的类,我用from这个方法生成LayoutInflater对象也报错了
//LayoutInflater inflater = LayoutInflater.from(new GridViewActivity2());
/*
错误信息
java.lang.IllegalStateException: System services not available to Activities before onCreate()
*/
急求解答!!!
gridview2.xml<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview1gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:columnWidth="90dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>griditem2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/Mygriditem2"
android:paddingBottom="3dip"
android:paddingLeft="10dip" >
<ImageView
android:id="@+id/griditem2imageview"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
/>
<TextView
android:id="@+id/griditem2textview"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
/>
</LinearLayout>
inflater 可以通过
LayoutInflater inflater = (LayoutInflater)context.getSystemService
(Context.LAYOUT_INFLATER_SERVICE);不管是那种方式你都用传过来的context,不要去new一个context。
LayoutInflater inflater = LayoutInflater.from(mContext);应该就可以了,不过我也说不出个为什么。
不过为什么不能new,看了源代码,乱的很我又发现了一个问题,每次描绘gridview中的一个item的时候,都会执行一次getView()方法
就像这儿,我给了13张的图片,但是却执行了getView()方法15次。我还没有调试是个什么原因