GridView First Item onClick не работает - почему? - PullRequest
0 голосов
/ 27 октября 2018

enter image description here

Предполагается, что это игра, соответствующая номеру каждой кнопки. Будет 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: downndantFocusability = "blocksDescendants" в макете ограничений, но все же первая кнопка в левом верхнем углу не становится красной, когда я нажимаю на нее.

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

1 Ответ

0 голосов
/ 27 октября 2018

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

 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.
...