适配器nullpointerexception中的Setbackgrounddrawable

时间:2014-08-17 03:25:34

标签: android nullpointerexception android-drawable

我想为我的应用程序更改背景,并使用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>

2 个答案:

答案 0 :(得分:0)

私人RadioButton radSelect;变量永远不会初始化

答案 1 :(得分:0)

您可以在使用前进行检查,

if(holder.mLayout!=null){
holder.mLayout.setBackgroundDrawable(draw);

}