GridView First Item onClick не работает - почему?

GridView First Item onClick не работает - почему?

Предполагается, что эта игра должна соответствовать количеству каждой кнопки. Будет 12 различных номеров, и номера будут установлены на случайную кнопку (2 кнопки будут иметь одинаковые номера). Игрок должен нажать первую кнопку, цвет кнопки изменится на красный, и если игрок снова нажмет на другую кнопку, он проверит, есть ли у нее такой же номер или нет, если да, то обе кнопки останутся красными. Для кнопок я использую сетку кнопок. Я установил все кнопки на черный цвет, и если я нажму на кнопку, она изменит свой цвет на красный. Кнопки отображаются правильно, и все кнопки работают отлично, за исключением первой кнопки (в верхнем левом углу), она не становится красной, но все равно проверяет, имеет ли она тот же номер или нет.

Мой код для getView на BaseAdapter:

gridView.setAdapter(new BaseAdapter() {
            @Override
            public int getCount() {
                return buttons.length;
            }

            @Override
            public Object getItem(int position) {
                return position;
            }

            @Override
            public long getItemId(int position) {
                return position;
            }

            @Override
            public View getView(final int position, final View convertView, final ViewGroup parent) {
                if (convertView==null) buttons[position] = new Button(activity3.this);
                else buttons[position] = (Button)convertView;

                if (position==12) Collections.shuffle(numbers);
                buttons[position].setText(String.valueOf(numbers.get(position%12)));

                buttons[position].setTextSize(0);
                buttons[position].setBackgroundColor(Color.BLACK);

                buttons[position].setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (onClick && position!=indexClick) {
                            onClick = false;
                            String _strClicked = buttons[indexClick].getText().toString();
                            String _strNow = buttons[position].getText().toString();
                            if (_strClicked.equals(_strNow)) {
                                countSuccess++;
                                buttons[indexClick].setEnabled(false);
                                buttons[position].setEnabled(false);
                                buttons[position].setBackgroundColor(Color.RED);
                                buttons[position].setTextSize(15);
                            }else {
                                countFail++;
                                buttons[indexClick].setBackgroundColor(Color.BLACK);
                            }

                            if (countSuccess==11){
                                Intent intent = new Intent(activity3.this, activity2.class);
                                intent.putExtra("countFail", String.valueOf(countFail));
                                startActivity(intent);
                                finish();
                            }
                        } else {
                            buttons[position].setBackgroundColor(Color.RED);
                            indexClick = position;
                            onClick = true;
                            buttons[position].setTextSize(15);
                        }
                    }
                });

                return buttons[position];
            }
        });

Для XML:

<?xml version = "1.0" encoding = "utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    xmlns:tools = "http://schemas.android.com/tools"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    tools:context = ".activity3"
    android:id = "@+id/act3_ConstraintLayout"
    >

    <GridView
        android:id = "@+id/gridview"
        android:layout_width = "0dp"
        android:layout_height = "wrap_content"
        android:layout_margin = "5dp"
        android:layout_marginStart = "8dp"
        android:layout_marginTop = "8dp"
        android:layout_marginEnd = "8dp"
        android:gravity = "center"
        android:horizontalSpacing = "10dp"
        android:numColumns = "auto_fit"
        android:stretchMode = "columnWidth"
        android:verticalSpacing = "10dp"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toTopOf = "parent" />

    <TextView

        android:id = "@+id/act3_textViewNICKNAME"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_marginStart = "24dp"
        app:layout_constraintBottom_toTopOf = "@+id/button"
        app:layout_constraintStart_toStartOf = "parent" />

    <TextView
        android:id = "@+id/act3_textViewNilaiMin"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_marginEnd = "32dp"
        android:layout_marginBottom = "4dp"
        app:layout_constraintBottom_toTopOf = "@+id/button"
        app:layout_constraintEnd_toEndOf = "parent" />

    <Button
        android:id = "@+id/button"
        android:layout_width = "0dp"
        android:layout_height = "wrap_content"
        android:layout_marginStart = "8dp"
        android:layout_marginEnd = "8dp"
        android:text = "HOME                                                          26416058"
        app:layout_constraintBottom_toBottomOf = "parent"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintHorizontal_bias = "1.0"
        app:layout_constraintStart_toStartOf = "parent" />
</android.support.constraint.ConstraintLayout>

Я попытался использовать android: ПотомкуFocusability = "blocksDescendants" в макете ограничений, но первая кнопка в верхнем левом углу не становится красной, когда я нажимаю на нее.

Я просмотрел несколько ссылок, но он все еще не работает: Первая кнопка Android GridView не работаетOnClickListener не работает для первого элемента в GridView

ваш метод getView (..) запускается во время инициализации? в противном случае он будет инициализировать onclickListener при первом нажатии. Тогда начни слушать второй раз

PushpikaWan 27.10.2018 08:39

@Lucefer, я действительно не понимаю, что вы имели в виду, он инициализирует onclickListener для первого щелчка. Я поместил метод setAdapter в onCreate. Первый щелчок по любому элементу приведет к тому, что кнопка изменит свой цвет на красный, просто не имеет значения, будет ли это первый щелчок или второй щелчок, любая кнопка рядом с первой кнопкой (верхний левый угол) изменит свой цвет фона на красный

Ricky 27.10.2018 08:49

где объявление и инициализация indexClick и onClick

navylover 27.10.2018 08:56

@navylover логическое onClick = false и int indexClick = -1

Ricky 27.10.2018 08:58

@ Рики, кажется, все идеально. я хотел бы предложить тест. вызывать Toast при каждом щелчке, последовательно нажимая кнопки и проверять, какой индексный тост отображается?

Syed Hamza Hassan 27.10.2018 09:37

@SyedHamzaHassan, я сделал это, когда я нажимаю первую кнопку, он показывает, что позиция равна 0 (правильно), но цвет фона все равно не меняется на красный

Ricky 27.10.2018 10:18
2
6
194
1

Ответы 1

пожалуйста, обратите внимание на эту строку:

 if (position==12) Collections.shuffle(numbers); 
 //if the length of buttons array is 12,the max index is 11, not 12.
 //position==12 always equals to false.

Спасибо за ответ, но он не имеет ничего общего с onclick, у меня положительный результат == 11

Ricky 27.10.2018 10:20

Другие вопросы по теме