我想为我的应用程序更改背景,并使用Gridview适配器。但是,当我单击单选按钮导致错误NullpointerException。如果你有代码更改背景使用Sharedpreferences请给我。非常感谢。
抱歉!我说英语不好:(
代码适配器!
public class WallPaperAdapter extends ArrayAdapter<Integer> {
Context context;
private Integer[] mThumbs;
int selectedIndex = -1;
private RadioButton radSelect;
public int idIsChecked;
private int ImageIsSelect;
public WallPaperAdapter(Context context, int resource, Integer[] objects) {
super(context, resource, objects);
this.context = context;
this.mThumbs = objects;
}
@Override
public View getView(final int position, final View convertView,
ViewGroup parent) {
View rowView = convertView;
final ViewHolder holder;
if (rowView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = inflater.inflate(R.layout.setwallpaper_layout, null);
holder = new ViewHolder();
holder.ImageResource = (ImageView) rowView
.findViewById(R.id.ivsetbackground);
holder.radSelectBG = (RadioButton) rowView
.findViewById(R.id.radBackground_1);
holder.btnSelectImage = (Button) rowView.findViewById(R.id.btnSave);
holder.mLayout = (LinearLayout) rowView
.findViewById(R.id.layout_setwallpaper);
rowView.setTag(holder);
} else
holder = (ViewHolder) convertView.getTag();
holder.ImageResource.setImageResource(mThumbs[position]);
holder.radSelectBG.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
if (selectedIndex != position && radSelect != null) {
radSelect.setChecked(false);
}
selectedIndex = position;
radSelect = (RadioButton) view;
holder.radSelectBG.setTag(mThumbs[position]);
idIsChecked = selectedIndex;
ImageIsSelect = (Integer) holder.radSelectBG.getTag();
Resources res = context.getResources();
Drawable draw = res.getDrawable(mThumbs[position]);
// Error Here !
holder.mLayout.setBackgroundDrawable(draw);
}
});
if (selectedIndex != position) {
holder.radSelectBG.setChecked(false);
} else {
holder.radSelectBG.setChecked(true);
if (radSelect != null && holder.radSelectBG != radSelect) {
radSelect = holder.radSelectBG;
}
}
return rowView;
}
public int getImageIsSelect() {
return ImageIsSelect;
}
public int getIdIsChecked() {
return idIsChecked;
}
@Override
public long getItemId(int position) {
return position;
}
static class ViewHolder {
ImageView ImageResource;
RadioButton radSelectBG;
Button btnSelectImage;
LinearLayout mLayout;
}
@Override
public int getCount() {
return mThumbs.length;
}
}
Xml代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/music_headphone"
android:id="@+id/layout_setwallpaper"
android:orientation="vertical" >
<GridView
android:id="@+id/gridview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnWidth="90dp"
android:gravity="center"
android:horizontalSpacing="10dp"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
android:verticalSpacing="10dp" />
<!--
<ListView
android:id="@+id/lvSetBackGround"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</ListView>
-->
</LinearLayout>
答案 0 :(得分:0)
私人RadioButton radSelect;变量永远不会初始化
答案 1 :(得分:0)
您可以在使用前进行检查,
if(holder.mLayout!=null){
holder.mLayout.setBackgroundDrawable(draw);
}