Изменение изображения в представлении сетки при нажатии, когда выполняются некоторые другие критерии

Как изменить изображение в моем конкретном представлении сетки, когда я получаю следующую ошибку. Я безуспешно следовал аналогичным примерам в других местах. т.е. я получаю «не могу изменить целое число на изображение», когда пытаюсь выполнить приведенное ниже, из (см. >Android GridView — обновление представления в зависимости от положения), т. е.:

int tempid = v.getId();
ImageView imgView = FruitToChooseFromImages.get(tempid);
imgView.setBackgroundResource(R.drawable.blank);

Я также пробовал:

{   // remove viewable image / make blank
ImageView imageView = (ImageView) v;
imageView.setImageResource(R.drawable.blank);
}

ПОЛНЫЙ КОД НИЖЕ, ЕСЛИ ВАМ ЭТО НУЖНО:

Основной код JAVA:

public class game1mainscreen extends Activity {

private MyGridviewAdapter1 mAdapter; 
private GridView gridview;  

private ArrayList<Integer> FruitToChooseFromImages; 
private ArrayList<Integer> tempintarray;

int Totalfruit = 11; // starting from 0 of course (so an 11=12 fruit) this means there are 6 pairs of fruit to select
int fruitleft = 12;
int fruitstilltoadd = Totalfruit + 1;
int numberOfFruitToRemove = 6;   
int puthere = 0; 
int imagesSelectedThusFar = 0;
int Fruitleft = 0;


int firstfruitselected = R.drawable.blank; int firstfruitselpos;
int secondfruitselected = R.drawable.blank; int secondfruitselpos;

int removefirstimage = 0;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.gameonemenu);


    {        
        FruitToChooseFromImages = new ArrayList<Integer>();

        FruitToChooseFromImages.add(R.drawable.fruit0);
        .....etc....
        FruitToChooseFromImages.add(R.drawable.fruit11);

        }

    ...code removed which randomly sorts FruitToChooseFromImages (ie arraylist of images) into 6 duplicate pairs of images...


    // prepared arraylist is passed to the Adapter class  
    mAdapter = new MyGridviewAdapter1(this, FruitToChooseFromImages);  

    // Set custom adapter to gridview  
    gridview = (GridView) findViewById(R.id.gridView1);
    gridview.setAdapter(mAdapter);

    // DO THIS WHEN CLICKED
    gridview.setOnItemClickListener(new OnItemClickListener() 
    {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) 
        { 
            int fruitselected = (int)FruitToChooseFromImages.get(position);     
            // start
            if (fruitselected == R.drawable.blank)
            {  
            // if blank/empty icon clicked on then DO NOTHING
            }

            else 
            { // firstly, say fruit name
                int soundtoplaynow = getrightsound(position, fruitselected);
                SoundManager.playSound(soundtoplaynow, 1);
              // next
                if (imagesSelectedThusFar == 0) 
                    {
                    imagesSelectedThusFar = 1;
                    firstfruitselected = fruitselected; firstfruitselpos = position;
                    //both switch fruit image to blank in the array and display blank at position clicked
                    FruitToChooseFromImages.set(position, R.drawable.blank);
                        {   // remove viewable image / make blank
                        ImageView imageView = (ImageView) v;
                        imageView.setImageResource(R.drawable.blank);
                        }
                    }
                else // so two images have been selected! do they match?
                    {
                    imagesSelectedThusFar = 0; // has reached 2, so reset to zero
                    secondfruitselected = fruitselected; secondfruitselpos = position;
                    if (firstfruitselected == secondfruitselected)
                        {
                    GeneralSoundManager.playSound(0, 1);// play happy sound - change code to GeneralSoundManager

                        //switch fruit image to blank and display blank at position clicked **
                        FruitToChooseFromImages.set (position, R.drawable.blank);
                    {   // remove viewable image / make blank
                        ImageView imageView = (ImageView) v;
                        imageView.setImageResource(R.drawable.blank);
                        }

                        int tempid = v.getId();
                        ImageView imgView = FruitToChooseFromImages.get(tempid);
                        imgView.setBackgroundResource(R.drawable.blank);


                        fruitleft = (fruitleft - 2);
                        }

                    else
                        { // you selected the wrong fruit, sorry.
                    GeneralSoundManager.playSound(1, 1); 
                        FruitToChooseFromImages.set (firstfruitselpos, firstfruitselected);
                        // 
                        }   
                    }
            }    

             // end

            if (fruitleft == 0)
                {
                //end game - add code here
                }
        }
    });
}



// returns the sound to play depending on what image was clicked on
public int getrightsound(Integer position, Integer switchused) {
...etc.... 
    return soundtoplay;
}

}

Код моего адаптера gridview:

public class MyGridviewAdapter1 extends BaseAdapter  
{  
private ArrayList<Integer> FruitToChooseFromImages;

private Activity activity;  

public MyGridviewAdapter1(Activity activity,ArrayList<Integer> FruitToChooseFromImages) 
{  
    super();  

    this.FruitToChooseFromImages = FruitToChooseFromImages;  
    this.activity = activity;  
}  


public int getCount() {  
    return FruitToChooseFromImages.size();  
}  


public Integer getItem(int position) {  
    return FruitToChooseFromImages.get(position);  
}  


public long getItemId(int position) {  
    return 0;  
}  

public static class ViewHolder  
{  
    public ImageView imgViewFlag;  

}  


public View getView(int position, View convertView, ViewGroup parent) {   
    ViewHolder view;  
    LayoutInflater inflator = activity.getLayoutInflater();  

    if(convertView==null)  
    {  
        view = new ViewHolder();  
        convertView = inflator.inflate(R.layout.gridview_row, null);  


        view.imgViewFlag = (ImageView) convertView.findViewById(R.id.imageView1);  

        convertView.setTag(view);  
    }  
    else  
    {  
        view = (ViewHolder) convertView.getTag();  
    }  


    view.imgViewFlag.setImageResource(FruitToChooseFromImages.get(position));  

    return convertView;  
}  
}  

Мой основной код xml - gameonemenu:

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:gravity="center"
android:layout_gravity="center"
android:background="@drawable/tree">
<GridView  

android:id="@+id/gridView1"  
android:layout_width="fill_parent"     
android:layout_height="wrap_content"
android:numColumns="4"
android:verticalSpacing="1dp"
android:horizontalSpacing="1dp"
android:stretchMode="columnWidth"
android:gravity="center" />
</LinearLayout>  

Мой XML-код Grirdview_row:

<ImageView  

    android:layout_height="64dp"  
    android:id="@+id/imageView1"  
    android:layout_width="64dp"  
    android:src="@drawable/blank"  
    android:layout_alignParentTop="true"  
    android:layout_centerHorizontal="true">  
</ImageView>  


</RelativeLayout>

PS Я использовал Grirdview_row xml, который изначально показывал текст, но мне не нужно отображать только текстовые изображения, но вызывает ли это проблему? PSS, пожалуйста, держите свои советы на уровне ПОЛНОГО новичка и, если возможно, включите код, соответствующий объяснению. Я не могу подчеркнуть это достаточно. Спасибо.


person John Ashmore    schedule 17.05.2012    source источник
comment
вы не указали ширину столбца gridview   -  person Prachi    schedule 31.05.2012
comment
В настоящее время я не проверял ваш ответ из-за отсутствия ранних ответов, вынуждающих меня использовать обходной путь изменения моего кода для обновления всего представления сетки. Поскольку вы единственный, кто ответил, примите от меня отличный комментарий.   -  person John Ashmore    schedule 05.06.2012