我遇到了问题。我有一个gridView,如果你点击一个项目,gridview中其他项目的背景会改变。但是,如果任何项目不在屏幕上,但在滚动条中,应用程序崩溃并出现NullPointerException错误,我假设这是因为项目的图像视图不在屏幕上。
这里是gridview和imageadapter
<GridView
android:id="@+id/gridView1"
android:layout_width="400dp"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:background="@drawable/redback"
android:columnWidth="50dp"
android:gravity="center"
android:layout_above="@+id/bbClear"
android:numColumns="auto_fit"
android:padding="15dp"
android:stretchMode="none" >
</GridView>
和图像适配器:
// Constructor
public ImageAdapter(Context c) {
mContext = c;
}
@Override
public int getCount() {
return mThumbIds.length;
}
@Override
public Object getItem(int position) {
return mThumbIds[position];
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(mContext);
imageView.setImageResource(mThumbIds[position]);
imageView.setId(mThumbIds[position]);
//imageView.setScaleType(ImageView.ScaleType.CENTER);
imageView.setPadding(getPixels(3), getPixels(3), getPixels(3), getPixels(3));
imageView.setLayoutParams(new GridView.LayoutParams(getPixels(40), getPixels(40)));
//imageView.setImageResource(R.drawable.greentwo);
return imageView;
}
private int getPixels(int dipValue){//because you shouldnt use pixels. dip all the way.
Resources r = mContext.getResources();
int px = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue,
r.getDisplayMetrics());
return px;
}
}
实际错误来自
行 v = parent.getChildAt(i);
在onClick方法中,其中i是位置。
我能做些什么:
避免在较小的屏幕上显示滚动条
或允许更改不在屏幕上的视图背景。