Почему мой gridview обновляется при запросе сделать это в один момент, но не в другом?

1

Я написал простую игру памяти. Вы нажимаете на одну из 16 карт (кнопки изображения), она перевернута, чтобы показать плод (например, изображение банана), и вы щелкаете другой карточкой, чтобы она перевернулась и раскрыть ее плод. Затем, если изображения совпадают, через секунду или два эти два фрагмента заменяются пробелом (т.е. удаляются с доски). Это происходит до тех пор, пока все не будет удалено. Также имя плода зачитывается в устной форме. Все упомянутое работает отлично, первая карта перевернута и изображение показано, за исключением случаев, когда вторая карта нажата, она никогда не отображает фрукты. Правильное название фрукта произносится, и я использовал аналогичный код для второй карточки, щелкнувшей по первой клике. Можете ли вы найти, где я ошибся?

Ключевым разделом в моем коде ниже является то, что показано ниже: "//так, что выбрано два изображения, они соответствуют?"

Первое изображение обновляется после нажатия на него. Однако, щелкнул ли первый фрукт = второй щелчок, или нет, пустая плитка не "повернулась", чтобы показать изображение.

Код:.... продолжается

    gridview.setOnItemClickListener(new OnItemClickListener() 
    {

         public void onItemClick(AdapterView<?> parent, View v, int position, long id) 
         { 
            int fruitselected = (int)FruitToChooseFromImages.get(position);  


             // start   
                if (position == firstfruitselpos && imagesSelectedThusFar == 1 || fruitselected == R.drawable.blank)
                    {  
                    // (if blank icon clicked) then DO NOTHING
                    }   

                else
                {   // a valid fruit has been selected, so firstly, say the fruit name
                    int soundtoplaynow = getrightsound(position, fruitselected);
                    SoundManager.playSound(soundtoplaynow, 1);
                    // next
                    if (imagesSelectedThusFar == 0) 
                    {
                        imagesSelectedThusFar = 1;

                        firstfruitselected = fruitselected; firstfruitselpos = position;
                        FruitToDisplayImages.set(position, fruitselected);

                        MyGridviewAdapter1.notifyDataChanged();
                        gridview.invalidateViews();
                        }
                    else // so two images have been selected! do they match?
                    {
                        imagesSelectedThusFar = 0; // has reached 2, so reset to zero
                        secondfruitselected = fruitselected; secondfruitselpos = position;
                        FruitToDisplayImages.set(position, fruitselected);
                        MyGridviewAdapter1.notifyDataChanged();
                        gridview.invalidateViews();

                        try{ Thread.sleep(1500); }catch(InterruptedException e){ }

                        if (firstfruitselected == secondfruitselected) //yes they match
                            {
                            SoundManager.playSound(50, 1);// play happy sound

                            //switch fruit image to blank and display blank at position clicked **
                            FruitToDisplayImages.set(position, R.drawable.blank);
                            FruitToChooseFromImages.set(position, R.drawable.blank);

                            FruitToDisplayImages.set(firstfruitselpos, R.drawable.blank);
                            FruitToChooseFromImages.set(firstfruitselpos, R.drawable.blank);                            
                            MyGridviewAdapter1.notifyDataChanged();
                            gridview.invalidateViews();   

                            fruitleft = (fruitleft - 2);
                            }

                        else // nope, dont match
                        { // you selected the wrong fruit, sorry.
                        SoundManager.playSound(60, 1); // play UNhappy sound
                        try{ Thread.sleep(1500); }catch(InterruptedException e){ }
                        FruitToChooseFromImages.set(firstfruitselpos, firstfruitselected);
                        FruitToDisplayImages.set(firstfruitselpos, R.drawable.blanktile);
                        FruitToDisplayImages.set(secondfruitselpos, R.drawable.blanktile);
                        MyGridviewAdapter1.notifyDataChanged();
                        gridview.invalidateViews();
}   
                    }

            }    

              // end

             if (fruitleft == 0)
                { //end game - add code here
                 SoundManager.playSound(70, 1); // play big happy congrats sound

                }             }
     });

и т.д

  • 0
    Я не думаю, что кто-то может выяснить, где находится ошибка, основываясь на информации о вашем текущем вопросе. Лучше всего отладить приложение и посмотреть, что пойдет не так.
  • 0
    Спасибо Лукспрог. Я углублюсь в отладку, о которой я горько не знаю в настоящее время .... но ненадолго.
Показать ещё 2 комментария
Теги:
gridview

1 ответ

0
Лучший ответ

Записи журнала говорят мне, что все работает точно так, как было задумано за кулисами, оно просто не обновляло gridview, как я просил об этом! Я изменил этот код без конца, используя общие методы устранения неполадок, но ничего не работало. Это просто то же самое.

После того, как изображения, которые будут отображаться, не будут сброшены вообще, но будут обновляться в другом месте, позже в цепочке событий прослушивания onclick я обнаружил, что gridview будет обновляться/отображаться корректно позже, когда я призываю его обновить. После попытки отложить обновление gridview с помощью sleep, чтобы иметь такой же эффект, полагая, что это решение и не удалось решить проблему, я создал обработчик, который задерживал сброс плитки до пустого или прозрачного, что позволяло отображать изображение. Задача решена.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню